(Day 23) 싱글톤, 팩토리 메서드, 제네릭
23일(2023-12-14)
전략을 바꿔야겠다. 실습을 따라가는 것만 해도 하루 시간이 부족할 정돈데, 정리를 따로 해서 올리는 건 시간을 최적화해서 사용하지 못하는 걸로 판단된다.
일자별 내가 무엇을 배웠는지, 이것이 나에게 어떤 성장이 되었는지, 내가 어떤 생각을 하고 있는지를 일기처럼 적어야겠다. (다 상세히 서술하진 못해도)
학습시간 필기
제네릭에 대한 용도 설명?
사용할 수 있는 타입을 제한하는 기능을 제공하는 문법이 제네릭이다. 범용 클래스를 더 잘 쓰기 위해서 이런 문법이 등장했다. 그래서 이름도 generic 이다.
범용 클래스의 문제점?
여러 용도로 사용하다보니 특정 타입만 쓰도록 제한을 가할 수 없다. 모든 개발자가 모든 클래스를 이해하고 사용법을 암기하고 있는 건 불가능하다.
우리가 직접적으로 이해를 가져올 수 있는 BCI 가 있다면 모를까, 생물학적인 한계가 있다.
제네릭 문법으로 타입을 다양하게 지정할 수 있게 되면 특정 타입에 쓸 수 있는 범용 클래스로 만들 수 있다. 그런 ‘엄격함’ 은 개발자의 실수를 줄여준다.
범용클래스.메서드( . . . 여긴 아무나 들어오면 안돼 . . . )
문법을 공부할 때는 예시와 함께 공부할 것. 수학, 영어도 마찬가지인 것처럼. 패턴 훈련.
제네릭을 예시로 보면, 적용 전/후를 비교하면 좋은 예시. 예시는 왜 이걸 쓰게 됐지
를 알게 해주는 것이 좋다.
파라미터와 아규먼트
ClassName.mehotdName( 여기는 아규먼트) ㄴ 대문자이니 쓰면 스태틱 필드/메서드를 쓸 것
instanceName.methodName( HERE, Arguments ) ㄴ 소문자이니 인스턴스고 인스턴스 필드/메서드 쓸 수 있음 ㄴ 인스턴스도 스태틱 필드/메서드 사용은 가능함. 단 인스턴스것이 아니라 클래스 것이므로 공통으로 사용하게 됨.
싱글톤 패턴 (Singleton Pattern)
힙 영역에서 사용하고 싶은 객체이나, 단 하나만 생성해서 만들게 제한을 하고 싶을 때 쓰는 것이 싱글톤 패턴이다.
= 객체 하나만 만들게 제한해 = 싱글톤 패턴 적용해
어떻게 하나? 1) 생성자 접근제어자를 private 으로 만들고, 2) 스태틱 변수에 레퍼런스 변수를 만들어두고, 3) 스태틱 메서드를 만들어서 레퍼런스가 널인 경우만 인스턴스를 생성하게 해준다. (클래스 내부이므로 private 접근가능( 4) 외부에서 객체를 사용하거나 만들 때 해당 스테틱 메서드를 이용한다. 대부분은 그 메서드 이름을 .getInstance()
로 쓴다.
단 하나만 생성하게 제한하는 이유?
- 여러개의 인스턴스가 생성되면 문제가 될 때
- 객체 생성 과정의 과정이 너무 복잡할 때, 메서드에 그 생성과정을 묶어두고 감추고 싶을 때. 이렇게 말하면 너무 길다. 전문 용어로 축약하자. 인스턴스 초기화(생성) 과정을 캡슐화하고 싶을 때.
팩토리 메서드 패턴(Factory Method Pattern)
싱글톤 메서드가 아니면 팩토리 메서드로 보면 된다. 마찬가지로 객체 생성 과정을 메서드 내에 캡슐화하고 객체 생성은 외부에서 메서드만 호출해서 사용하게 만드는 설계 기법이 팩토리 메서드 패턴이다.
생성자가 있는데 왜 팩토리 메서드 패턴을 쓰는가? 유지보수 때문인 듯?
- 일단 이게 뭘 하는 메서드인지 생성자쓰는 것보다 메서드 쓰는 것이 바로 느낌이 온다.
- 생성자는 파라미터를 어떻게 받는지에 따라 코드블럭들이 생기는데 팩토리 메서드는 하나의 블럭에서 처리가 가능하다.