본문 바로가기
TIL

20240627 TIL

by liony 2024. 6. 27.

Optional<T>

  1. Optional<T> 클래스는 NPE 를 방지하기 위해 사용하며 null 이 들어올 수 있는 값을 감싸는 Wrapper 클래스이다. Generic으로 타입을 지정할 수 있다.
  2. 객체가 null 이어도 NPE 가 발생하지 않고 비즈니스 로직대로 흘러갈 수 있어 안정성 향상의 장점이 있다. 다만 null 체크 및 Wrapping 시 오버헤드가 발생하여 성능이 저하될 수 있다. 따라서 null 이 절대 나오지 않는 경우라면 Optional 을 사용하지 않는 것이 성능에 더 좋다.
  3. 종료 연산 중 orElse(T)는 Optional 값이 null이건 아니건 항상 수행하기 때문에 사용에 신중해야 한다. 특히 메서드를 파라미터로 갖는다면 Optional 값의 null 여부와 상관없이 해당 메서드 내 로직이 모두 수행되기 때문에 잘 확인하고 사용해야 한다.

ThreadLocal

  1. ThreadLocal 은 쓰레드에 대한 로컬 변수를 제공하여 각각의 쓰레드가 변수에 대해 독립적으로 접근할 수 있게 한다.(JDK 1.2부터 제공) 사용자 인증 관련 부분에서(Spring Security) 사용될 수 있다.
  2. 쓰레드 풀을 사용하는 환경에서는 쓰레드 로컬 변수 사용이 끝난 후 remove() 메서드를 명시적으로 호출해줘야 한다. 쓰레드가 재활용되면서 이전에 설정했던 쓰레드 로컬 정보가 남아있을 수 있기 때문이다.

오브젝트 - 2장

  1. 시스템의 어떤 기능을 구현하기 위해 객체들 사이에 이뤄지는 상호작용을 협력(Collaboration)이라고 한다.
  2. 객체가 다른 객체와 상호작용할 수 있는 유일한 방법은 메세지를 전송(요청)하는 것이다. 다른 객체에게 요청이 도착할 때 해당 객체가 메세지를 수신(응답)했다고 이야기한다. 메세지를 수신한 객체는 스스로의 결정에 따라 자율적으로 메세지를 처리할 방법을 결정하는데 이 방법을 메서드라고 부른다.
  3. 부모 클래스에서 기본적인 알고리즘 흐름을 구현하고 중간에 필요한 처리를 자식 클래스에게 위임하는 디자인 패턴을 Template Method 패턴이라고 한다.
  4. 설계가 유연해질수록 코드를 이해하고 디버깅하기 어려워진다. 그렇다고 해서 유연성을 억제하면 코드를 이해하고 디버깅하기는 쉬워지지만 재사용성과 확장 가능성은 낮아질 수 밖에 없다. 따라서 항상 유연성과 가독성 사이에서 고민해야 한다.
  5. 상속은 코드 재사용을 위해 널리 사용되는 기법이지만 클래스 상속을 위해서는 부모 클래스의 구조를 잘 알고 있어야 하며 부모 클래스의 구현이 자식 클래스에게 노출되기 때문에 캡슐화를 약화시킨다. 그리고 부모-자식 클래스 간의 관계를 컴파일 시점에 결정하기 때문에 실행 시점에 객체의 종류를 변경할 수 없어 설계를 유연하지 못하게 한다는 단점이 있다.
    그래서 코드 재사용 면에서는 상속보다 합성을 권장한다. 합성은 인터페이스에 정의된 메세지를 통해서만 재사용이 가능하므로 구현을 효과적으로 캡슐화할 수 있다. 그리고 의존하는 인스턴스를 교체하는 것이 비교적 쉬워 설계를 유연하게 만든다.
    상속을 절대 사용하지 말라는 이야기는 아니다. 대부분의 설계에서 다형성을 위해 인터페이스를 재사용하는 경우 상속과 합성을 함께 사용할 수 밖에 없다.

참고

[Java] JAVA8 Optional Class에 대한 정의 및 사용방법 - Tutorial(Sample)

java, optional의 orElse와 orElseGet의 차이

자바 ThreadLocal: 사용법과 주의사항

Thread의 개인 수납장 ThreadLocal

'TIL' 카테고리의 다른 글

20240701 TIL  (0) 2024.07.01
20240628 TIL  (0) 2024.06.28
20240609 일지  (1) 2024.06.10
20240608 일지  (1) 2024.06.10
20240606 일지  (0) 2024.06.07