[22.10.01] Daily 회고록 (이펙티브 자바 - 정적팩토리, 열거, 플라이웨이트)
일간 회고록(TIL)

[22.10.01] Daily 회고록 (이펙티브 자바 - 정적팩토리, 열거, 플라이웨이트)

[프로젝트]

프론트엔드를 맡은 팀원과 온라인으로 만나서 구글 로그인 파트를 연동하였다. 구글 로그인을 하면 나오는 access_token을 일단 개발 단계이기 때문에 암호화하지 않고 파라미터로 보내서 긁어와서 api를 요청하는 방식인데 나중에 암호화를 해서 와이어샤크같은 곳에 노출되지 않도록 설정할 예정이다.

 

[코딩테스트 참가]

오늘은 2022 하반기 백엔드 데브매칭에 참가했다. 14:00부터 2시간 진행됐고, 알고리즘 3문제(실버~골드하위정도), SQL 한 문제 정도가 나와서 30분정도 남기고 올 솔브했다. 

 

[개인공부]

이펙티브 자바 강의를 수강 시작했다. 어제 소마 팀 멘토링을 하는데 신청한 인프런 강의를 모두 봐야한다고 해서..(수료증 제출), 그것과 더불어 우아한 테크코스의 프리코스도 11월부터 있을 예정이니 자바를 슬슬 공부하고자 수강을 시작했다.

오늘은 정적 팩토리와 열거형, 플라이웨이트 패턴, 인터페이스의 정적 메서드에 대해 공부했다.

 

정적 팩토리 메서드

일반적으로 매개변수 타입이 같은 두 생성자는 존재할 수 없으나, 정적 팩토리는 가능하다.

기본 생성자를 private으로 만들고 사용하여, 프로그래머들이 생성자를 사용할 수 없음을 강제한다.

또한, 하나의 객체에만 지속적으로 접근하도록 설정할 수 있으며 인터페이스 기반의 프레임워크를 사용하도록 할 수 있다.

즉, 클라이언트가 인터페이스 타입으로 밖에 선언하지 못하게 만들 수 있다. 

그리고 인터페이스만 있고 코드 상에서 구현체를 선언하지 않아도 등록이 되어있는 구현체를 찾아올 수 있다. 이를 통해 구현체에 의존적이지 않은 코드를 만들 수 있다. 코드에서 구현체 의존성이 떨어지면 더욱 객체지향적인 코드를 작성 가능하다.

 

단점으로는 private 기본 생성자로 인해 일반적인 상속을 하지 못한다. 내부 필드로 가지고 가는 has-a 방식으로 진행해야한다. 또한, 정적 팩토리 메서드는 생성자와 달리 기본적인 이름이 아닌 커스텀 메서드 명을 가지고 있어 프로그래머가 찾기 어렵다. 그래서 문서화를 이용하는 편이 좋다.

 

 

열거타입

기본적으로 고정된 값 내부에서 값을 선택해야하므로 재검증을 해야하는 수고가 줄어들며 타입-세이프티가 보장된다.

enum클래스 내의 모든 상태를 출력할 수 있으며, 클래스 내부에 생성자, 메서드, 필드를 가질 수 있다(다만 제약이 있다.)

그리고 null이 존재하지 않으므로 equals보다 ==을 사용하는 편이 좋으며, map과 set을 사용할 경우 위 comment와 같이 

EnumSet과 EnumMap을 이용해야한다. (효율이 증가한다.)

 

 

플라이웨이트 패턴

객체 내부에서 변하지 않는 속성이 존재한다면 그 속성이 모든 객체에서 쓸모 없이 메모리가 낭비될 수 있다. 그렇기 때문에 해당 부분을 빼서 같은 객체를 참고하도록 설정하는 패턴이다. 이 패턴을 사용하지 않으면 변하지 않는 속성 100개를 가지고 있는 객체 100개가 생성될 것이고, 10000개면 9999개의 낭비가 발생하게 된다.