static 과 JVM 메모리 모델을 이해해보자!
2024. 9. 1. 00:13
Language/Java
객체지향 프로그래밍 시작하기Static 과 메모리의 관계를 알아보도록 해보자이 글의 목표는 static 키워드와 메모리 관계에 있어서 이해를 돕고자 또한, JVM 에 사용하는 메모리 모델을 통해 자바 프로그래임이 어떤식으로 동작하는지에 대한 원리를 학습하는것을 목표로 합니다. 1. static 과 메모리의 관계2. static 멤버 들의 접근 방법3. private 생성자와 static과의 관계4. JVM 이 상요하는 메모리 영역5. class, object, instance의 상호관계 1. static 과 메모리의 관계메인(시작) 클래스는 왜 객체 생성(new)없이 실행이 되나요?public class StaticTest { public static void main(String[] args) {..
컬렉션 API 개선 - modern java in action
2024. 6. 18. 19:52
Language/Java
큰틀에서 챕터 8은 아래와 같은 내용을 공유한다.컬렉션 팩토리 사용하기리스트 및 집합과 사용할 새로운 관용 패턴 배우기맵과 사용할 새로운 관용 패턴 배우기앞서, Modern Java in Action 에서는 챕터 8~10 까지는 Part 3으로 ‘스트림과 람다를 이용한 효과적 프로그래밍’ 으로 분류를 합니다.책의 저자는 ‘컬랙션 API 가 없었다면 자바 개발자의 삶은 많이 외로웠을 것’이라고 표현합니다.책에서 표현 하듯이, 거의 모든 자바 애플리케이션에서 컬렉션을 사용하고, 지금까지 컬렉션과 스트림 API를 이용해 데이터 처리 쿼리를 어떻게 효율적으로 처리할 수 있을지 살펴보려고 합니다.컬렉션 API 에는 성가시고, 에러를 유발하는 여러 단점이 존재합니다.챕터 8에서는 자바 8,9 에서 추가되어 우리의 ..
멀티 쓰레드 이용 - 자바 달력 시간 변경 코드
2023. 12. 6. 13:49
Language/Java
멀티 쓰레드 이용해서 자바 달력 코드 변경 하는 구문입니다. 예시 ) 50개의 스레드 를 이용해서 for 문을 돌릴때 50개의 순서대로 시간이 상승하는 코드입니다. 50개가 같은 시간으로 값을 보내는게 아닌 한개의 스레드마다 대략 26개의 데이터를 00:00:00 개의 넣고 차례대로 1초씩 상승해서 데이터를 넣습니다. private static final String FORMAT_STRING = "yyyy-MM-dd HH:mm:ss"; private static final AtomicInteger sharedCounter = new AtomicInteger(0); private static volatile String startDateString = "2021-10-01 00:00:00"; //시간이 다..
스트림 Stream 을 사용하는 이유 - Modern Java in Action
2023. 10. 2. 20:43
Language/Java
자바 8은 데이터베이스 질의 언어에서 표현식을 처리하는 것처럼 병렬 연산을 지원하는 스트림이라는 새로운 API 를 제공한다. 데이터베이스 질의 언어에서 고수준 언어로 원하는 동작을 표현하면, 구현(자바에서는 스트림 라이브러리가 이 역할을 수행) 에서 최적의 저수준 실행 방법을 선택하는 방식으로 동작한다. 즉, 스트림을 이용하면 에러를 자주 일이키며 멀티코어 CPU 를 이용하는 것보다 비용이 훨씬 비싼 키워드 synchronized를 사용하지 않아도 된다. 더보기 멀티코어 CPU의 각 코어는 별도의 캐시(빠른 메모리) 를 포함하고 있다. 락을 사용하면 이러한 캐시가 동기화되어야 하므로 속도가 느린 캐시 일관성 프로토콜 인터코어 통신이 이루어진다. 조금 다른 관점에서 보면 결국 자바8에 추가된 스트림 API..
Modern Java in Action - Reviews(모던 자바 인 액션 - 리뷰)
2023. 10. 2. 20:28
Language/Java
안녕하세요, 늘 부족하고 배움을 갈구하는 2년차 백엔드 개발자 던킨 입니다. 오늘 Modern Java in Action 책을 사고 읽으면서 좋은 내용들이 많아 리뷰를 하려고합니다. 많은 개발자 분들이 이미 이 책에 관련해서 리뷰와 함께 많은 리소스를 공유 해주었다고 해도 과언이 아니지만, 저 또한 이 책에 푹 빠져있는 독자로써 또한, 제 블로그를 찾아오시는분들을 위해 짧게 나마 잘 정리 해서 공유드리고 싶어 리뷰를 시작했습니다. '함수형 프로그래밍은 뭔가요?' - 함수형 프로그래밍은 프로그래밍 기법을 지칭한다. 함수형 프로그래밍에서는 함수를 값으로 취급한다. 자바 8의 놀라운 점은 함수형 프로그래밍의 여러 장점을 친숙한 자바 문법으로 접목했다는 것이다. 훌룡한 자바 8의 설계 덕분에 함수형 프로그래밍을..
ArrayList 와 LinkedList 의 차이점
2023. 5. 12. 00:46
Language/Java
빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList보단 LinkedList를 사용하는것이 좋다. 그러나 인덱스 검색이나, 맨 마지막에 객체를 추가하는 경우에는 arrayList가 더 좋은 성능을 발휘한다. ArrayList에 객체를 추가하면 인덱스 0부터 차례대로 저장된다, 또한 특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 밀려난다. ArrayList를 생성하고 런타임 시 필요에 의해 객체들을 추가하는 것이 일반적이지만, 고정된 객체들로 구성된 List를 생성할때도 있다. 이런 경우에는 Arrays.asList(T...a)메소드를 사용하는 것이 간편하다. √ List list = Arrays.asList(T...a) T타입 파라미터에 맞게 asList(..
자바에서 병렬(parallel) 처리란?
2023. 5. 10. 23:23
Language/Java
병렬(parallel) 처리란 한가지 작업을 서브 작업으로 나누고, 서브 작업들을 분리된 스레드에서 병렬적으로 처리하는 것을 말한다. 병렬 처리 스트림을 이용하면 런타임 시 하나의 작업을 서브 작업으로 자동으로 나누고, 서브 작업의 결과를 자동으로 결합해서 최종 결과물을 생성한다. 예를 들어 컬렉션의 요소 총합을 구할 때 순차 처리 스트림은 하나의 스레드가 요소들을 순차적으로 읽어 합을 구하지만, 병렬 처리 스트림을 이용하면 여러 개의 스레드가 요소들을 부분적으로 합하고 이 부분합을 최종 결합해서 전체 합을 생성합니다. 다음 예제를 보시면 순차 처리 스트림과 병렬 처리 스트림을 이용하여 사용된 스레드의 이름이 무엇인지 콘솔에 출력하여 보여드리겠습니다. public class parallel { publi..
파이썬 정규식 표현(Regex)이용한 시간표 정리
2022. 9. 16. 17:46
Language/python
더보기 오늘은 파이썬을 통한 몇가지의 정규 표현식에 관하여 글을 적고자 합니다. 일단 글 쓰기에 앞서, 저는 자바로 취업을 하였지만 회사의 요구에 의해 파이썬으로 다시 개발을 하고있는 0년차 개발자입니다. 많은 블로그들이 양질의 글들을 공유를 하고있어서 정규 표현식의 모든것들을 설명하지 않으려고합니다 양해 부탁드립니다. 정규 표현식 정규 표현식( regular expression, as regexp or regex, rational expression)정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있으며, 특히 펄과 Tcl은 언어 자체에 강력한 정규 표현식을 구현하고 있다. 컴..
numpy -인덱싱 / 슬라이싱
2022. 6. 21. 17:24
Language/python
2차원 인덱싱입니다. 23번째 보시면 0번째안에 배열2를 가져오면 1행의 3열을 가져옵니다. 3차원 인덱싱입니다. 1차원 벡터 슬라이싱 2차원 벡터 슬라이싱 위 그림을 보시면 차원이 줄어드는것을 보실수있습니다. x[0,:2]형태는 똑같아 보이지만 행렬이 아닌 벡터인것이다. 3차원 벡터 슬라이싱
numpy - ndarray 데이터 형태 바꿔보기
2022. 6. 21. 17:07
Language/python
ravel,np.ravel : 다차원배열을 1차원으로 변경 'order'파라미터 -'C' - row 우선 변경 'F' - column 우선변경 Flatten 다차원 배열을 1차원으로 변경 ravel 과의 차이점: copy 를 생성하여 변경함(즉 원본 데이터가 아닌 복사본을 반환) 'order'파라미터 'c' -row 우선 변경 'F'-column 우선변경 내부적으로 변경이냐아니냐 이고 데이터에 변경되는게 중요하지 않으면 아무거나 쓰고 중요하면 flatten 을 사용해서 복사본을 사용하자! ravel 에는 중요한 함수가 있습니다. order! order 라고 하는 값은 C값이다. 다시 한번 호출된걸 보자 이해가 가시나요? 행과 열의 기준으로 값을 나타냅니다. reshape 함수 array 의 shape 을..