JAVA: 282개의 글
| 개요(Introduction) Java에서 객체가 어떻게 형성되고 관리되는 지 이해하려면 .java 파일로 작성되었던 소스코드가 어떻게 JVM위로 로딩되는 지 아는 것이 대단히 중요합니다. 왜냐하면 클래스 로딩 때 발생하는 이슈를 해결할 수 있고 코드 상에서 동적으로 클래스를 로딩하는 구문을 이해할 수 있으며 드물지만 자신만의 클래스 로더(User-defined loader)를 만드는 것이 가능하기 때문입니다. | 자바 파일(Java file), 클래스 파일(Class file) 자바 파일은 확장자가 .java 인 파일로서 자바 언어로 소스 코드를 작성할 때 그 내용을 적는 파일을 뜻합니다. 그리고 이 자바 파일을 자바 컴파일러로 컴파일한 파일이 바로 .class 확장자를 가진 클래스 파일입니다. 우..
Executors는 JDK에서 제공하는 framework로서 Java application에서 실행되는 task를 간단하게 비동기로 처리할 수 있게 해주는 thread-pool과 API를 제공합니다. Java application 상에서 thread를 한 두개를 만들어 돌리는 것은 그렇게 어렵지 않습니다. 하지만 그 숫자가 20, 30 혹은 그보다 많아질 경우에는 이 많은 thread를 어떻게 관리할 것인지 문제가 되기 시작합니다. 이 문제를 Executors framework을 통해 간단히 처리할 수 있습니다. Executors framework가 하는 일은 크게 3가지 입니다. 1. Thread 생성 : thread를 생성하거나 thread pool을 만드는 method를 제공합니다. 2. Threa..
본격적인 리액티브 프레임워크를 사용하기 전에, 옵저버 패턴 - 발행구독 패턴으로 만들어진 Spring Event와 SSE를 통해 리액티브 어플리케이션을 만들어보자 cf) 옵저버 패턴 포스팅 : https://sjh836.tistory.com/180 1. Spring 에서 Event 를 다룬다? 스프링 프레임워크에서는 EventListener를 통해 발행-구독(Pub/Sub) 패턴, 이벤트 버스(EventBus) 등을 지원한다. ApplicationContext 레벨에서 지원 도메인 서비스간 강한 결합, 강한 의존성을 Event 기반으로 풀어내면, 느슨한 결합 등을 얻을 수 있다. 개인적으론, 이것은 상황에 따라 장점이 될수도 있고, 단점이 될 수도 있다고 본다. 핵심 비즈니스 이외, 부가적인 비즈니스 로..
Spring 프레임워크도 5.x 부터는 리액티브를 지원하기 시작했지만, 이 글에서는 그 전까지의 상황을 살펴보았다. 리액티브가 왜 필요하고, 스프링5가 나오기전까진 반응성을 어떻게 구현하였는지를 살펴본다. 1. 리액티브(반응형)이 왜 필요한가? 1-1. C10K 문제 http://www.kegel.com/c10k.html 다수의 클라이언트를 동시에 처리할 수 있는가? 서버에서 10K(1만)개의 클라이언트에 대한 연결, 응답, 부하에 관련된 이야기 스레드는 서버의 cpu core 수에 종속적, 멀티스레드로 10k 요청에 대해 처리할 수 있는 한계가 있다. 요청 스레드들이 io wait 에 전부 빠져있다면? 대안) event-driven 방식 이벤트(=요청)와 io처리(I/O 멀티플렉싱)를 분리 이벤트루프는..
해당 내용은 이펙티브 자바 3판 (조슈아 블로크 지음, 이복연 옮김)를 읽고 나같은 초심자의 눈으로 이해한 내용을 정리해보았다. 이전 장은 아직 정리가 덜 끝나서... 먼저 끝난 9장부터 포스팅한다. 책에 있는 내용을 기반으로 썼지만 책에 없는 내용도 조금 적었다. (인터페이스화에 대한 고찰, 컴파일러의 문자열연산 최적화 등) 9장의 아이템 목록 지역변수의 범위를 최소화하라 전통적인 for문보다는 foreach문을 사용하여라 라이브러리를 익히고 사용하라 정확한 답이 필요하다면 float와 double은 피하라 박싱된 기본 타입보다는 기본 타입을 사용하라 다른 타입이 적절하다면 문자열 사용을 피하라 문자열 연결은 느리니 주의하라 객체는 인터페이스를 사용해 참조하라 리플렉션보다는 인터페이스를 사용하라 네이티..
해당 내용은 이펙티브 자바 3판 (조슈아 블로크 지음, 이복연 옮김)를 읽고 나같은 초심자의 눈으로 이해한 내용을 정리해보았다. 책에 있는 내용을 기반으로 썼지만 책에 없는 내용도 조금 적었다. (익명클래스와 람다 비교, 성능적 관점, 함수형 인터페이스와 default메소드, 코드블록-람다블록 비교, Collectors API의 구체적 설명 등) 7장의 아이템 목록 익명 클래스보다는 람다를 사용하라 람다보다는 메소드 참조를 사용하라 표준 함수형 인터페이스를 사용하라 스트림은 주의해서 사용하라 스트림에서는 부작용없는 함수를 사용하라 반환 타입으로는 스트림보다 컬렉션이 낫다 스트림 병렬화는 주의해서 적용하라 아이템42. 익명 클래스보다는 람다를 사용하라 람다는 이름이 없고 문서화도 못한다. 따라서 코드 자체..
해당 내용은 이펙티브 자바 3판 (조슈아 블로크 지음, 이복연 옮김)를 읽고 나같은 초심자의 눈으로 이해한 내용을 정리해보았다. 제네릭 자체를 공부좀 해봐야겠다는 생각이 드는... 챕터였다ㅋㅋㅠ 5장의 아이템 목록 raw type은 사용하지 마라 비검사 경고를 제거하라 배열보다는 리스트를 사용하라 이왕이면 제네릭 타입으로 만들어라 이왕이면 제네릭 메소드로 만들어라 한정적 와일드카드를 사용해 API 유연성을 높여라 제네릭과 가변인수를 함께 쓸 때는 신중해라 타입 안전 이종 컨테이너를 고려하라 서문 제네릭은 jdk1.5 부터 사용할 수 있다. 제네릭을 지원하기 전에는 컬렉션에서 객체를 꺼낼 때 마다 형변환을 해야 했다. 1.5 부터는 제네릭을 사용하면 컬렉션에 담을 수 있는 타입을 컴파일러에게 알려주며, 컴..
해당 내용은 이펙티브 자바 3판 (조슈아 블로크 지음, 이복연 옮김)를 읽고 나같은 초심자의 눈으로 이해한 내용을 정리해보았다. 책에 있는 내용을 기반으로 썼지만, 책에 없는 내용도 조금 적었다. (guava Immutable, 템플릿메소드, 중첩클래스 등) 또한 이번 정리부터는 조금 더 많이 요약해서 기술할 것이며, 코드예제도 많이 뺐다. 참고로 책의 코드는 https://github.com/WegraLee/effective-java-3e-source-code 에서 볼 수 있다. 4장의 아이템 목록 클래스와 멤버의 접근 권한을 최소화하라 public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 변경 가능성을 최소화하라 상속보다는 컴포지션을 사용하라 상속을 고려해 설계하고 문서화하라. ..
해당 내용은 이펙티브 자바 3판 (조슈아 블로크 지음, 이복연 옮김)를 읽고 나같은 초심자의 눈으로 이해한 내용을 정리해보았다. 책에 있는 내용을 기반으로 썼지만, 책에 없는 내용도 조금 적었다. (commons의 각종 빌더, lombok 등) 조슈아 블로크님이 구글에 다녀서 그러신가.. 구글 라이브러리(AutoValue 등)들을 책 전면에서 홍보하고 있는 느낌이 있다..ㅋㅋㅋㅋ 구글의 라이브러리들도 물론 좋지만, apache commons나 lombok 을 (국내에서는) 아마 더 많이 실무에 쓰고 계시지 않을까 추측해본다. 3장의 아이템 목록 equals는 일반 규약을 지켜 재정의하라 equals를 재정의하려거든 hashCode도 재정의하라 toString을 항상 재정의하라 clone 재정의는 주의해서..
이펙티브자바 3판이 드디어 번역되어 출판되었다. (2달전에 2판샀는데 다 읽지도않았는데...) 해당 내용은 이펙티브 자바 3판 (조슈아 블로크 지음, 이복연 옮김)를 읽고 나같은 초심자의 눈으로 이해한 내용을 정리해보았다. (정리된 글만 보는 것보단 이 책은 꼭 사길..바랍니다) 책에 있는 내용을 기반으로 썼지만, 책에 없는 내용도 조금 적었다. (자바빈 패턴에서 필수인자 받기, 직렬화, Weak Reference 등) 2장의 아이템 목록 생성자 대신 정적 팩터리 메서드를 고려하라 생성자에 매개변수가 많다면 빌더를 고려하라 private 생성자나 열거 타입으로 싱글턴임을 보증하라 인스턴스화를 막으려거든 private 생성자를 사용하라 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 불필요한 객체 생..