CS/Java (with Effective)
-
Generic과 raw-type 그리고 비검사 경고CS/Java (with Effective) 2022. 4. 28. 16:25
해당 글은 Effective Java item26, item27을 기반으로 합니다. 로 타입은 사용하지 말라. 비검사 경고를 제거하라. Generic 파트는 엄청 긴 것도 아니거니와.. 객체를 선언하고 Generic을 통해 타입 선언 등에 있어서 주의할 점이 많을 것 같아 웬만하면 싹다 훑고 가려합니다. item 26. raw 타입은 사용하지 말라. 우선 Generic class, Generic Interface란, 아래와 같이 선언에 있어 타입 매개 변수를 사용한 경우를 의미합니다. public interface List extends Collection { ... } 해당 코드는 대표적인 제네릭 인터페이스 List의 선언부입니다. 원래는 List로 표현하는게 맞지만, 단순히 List라고도 선언할 수 ..
-
Composition vs extendsCS/Java (with Effective) 2022. 3. 2. 15:08
해당 글은 Effective Java Item18을 기반으로 합니다. 상속보다는 컴포지션을 사용하라. 해당 글에서 상속은 인터페이스의 상속(implements)은 포함하지 않습니다. '상속(extends)은 메서드 호출과 달리 캡슐화를 깨트린다.' 즉, 상위 클래스가 어떻게 구현되는냐에 따라 하위 클래스가 오작동 할 수 있다는 뜻입니다. 상위 클래스 구현이 변경되는 경우 하위 클래스 또한 변경해야할 수도 있는 것이죠. 따라서, 이러한 문제점을 방지하기 위해 composition의 사용을 제안하고 있는데요. composition이 무엇인지 살펴보고, 상속시 발생할 수 있는 문제점, 그리고 어떤 경우에 composition 또는 extends를 사용하는지에 대해 알아보겠습니다. Composition 기존 클..
-
HashCodeCS/Java (with Effective) 2022. 2. 27. 22:41
해당 글은 Effective Java Item11을 기반으로 합니다. Equals 재정의시 HashCode도 재정의하라 equals 재정의 내용이 상당히 알찬데, 전 되도록이면 책 내용처럼 equals 재정의는 하지 않을 것이기 때문에 일단은 생략했습니다. 그럼 hashCode 재정의도 일단은 필요 없겠지만, 둘이 어떤 연관관계가 있는지 살펴보는 것은 재밌을 듯 합니다. 내용에 들어가기전 Hash에 대해 모르신다면, 아래 포스팅을 참고해주세요. 11. Hash 해시 함수(hash function) 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수 해시는 매핑을 통해 원하는 데이터를 더욱 빠르게 접근해 사용할 수 있도록 돕습니다. 또한, 해시는 복호 exponential-e.tistory.co..
-
SingletonCS/Java (with Effective) 2022. 2. 8. 14:07
해당 글은 Effective Java Item3을 기반으로 합니다. private 생성자나 열거 타입으로 싱글턴임을 보증하라. Singleton 관련 내용은 아래 포스팅에서 진행했습니다. Bean 그리고 scope 지난번 Bean이 무엇인지 간략하게 알아봤습니다. (IoC container, Bean 관련 개념이 아직 부족하시다면 간략히 이전 포스트 참고해 주세요.) Bean을 사용하는 이유 중 하나가 scope가 자동으로 singleton으로 exponential-e.tistory.com SpringBoot Application 실행시 SpringBoot Application 이하 패키지의 @Component, @Service, @Controller, @Repository가 붙은 클래스는 Compone..
-
BuilderCS/Java (with Effective) 2022. 2. 6. 14:07
해당 글은 Effective Java Item2를 기반으로 합니다. 생성자에 매개변수가 많다면 빌더를 고려하라. 이번 글에선 알고리즘을 풀며, 코드를 어떻게 변경해 나갔고 결론적으로 왜 빌더가 필요하게 됐는지 과정을 보여드립니다. 빌더 구현을 바로 보시려면 'Builder 구현'을 검색해주세요. 어느 언어나 마찬가지겠지만, 자바로 알고리즘 문제를 풀다보면 여러 클래스를 선언하게 됩니다. 따라서, 본래는 클래스 중복을 피하고 사용하기 위해 이너클래스로 선언해 사용을 했었습니다. 근데, 조금은 객체지향적으로 코드를 구성하고 싶다 생각이 들었고, 공통 코드를 구성해 알고리즘 문제를 풀게되었습니다. 예를 들면 초기 코드는 아래와 같습니다. import java.util.LinkedList; import java..
-
Static Factory MethodCS/Java (with Effective) 2022. 1. 13. 23:56
이전에 진행한 MSA 프로젝트를 좀 더.. 사실 죽어가는 녀석 살려보고자 Webflux / WebClient 학습을 진행하고 있습니다. 공부하다 보니 Webflux 공식 문서에서 읽다보니 아래와 같은 문구를 발견할 수 있었습니다. The simplest way to create a WebClient is through one of the static factory methods WebClient를 가장 단순하게 생성하는 방법은 정적 팩토리 메소드를 이용하는 것이다. 라네요. 정적 팩토리 메서드? 무슨 디자인패턴 공부할 때 본 것 같기도 한 이 네이밍.. 사실 전 구면입니다. 후후 바로 이펙티브 자바 1장에서 만났습니다. 생성자 대신 정적 팩터리 메서드를 고려하라. 이 내용을 너무 건성으로 봤었는데, 상당..