작성
·
453
1
안녕하세요 강의 잘 보고 있습니다
다름이 아니라 4분대에 나오는 생성자를 companion 으로 바꿔주셨는데.. 이게 더 좋다라고 하시는 이유를 제가 짐작이 안가서 그런데 혹시 간략하게 알려 주실수 있으신가요..?
답변 1
2
안녕하세요, wndqud70님~!!! 😊 아이고~~ 너무 좋은 질문이십니다!!!
말씀해주신 companion object를 사용해 객체를 인스턴스화 하는 방식을 '정적 팩토리 메소드'라고 부르는데요!
<Effective Java 3판 아이템1>을 보면, 생성자 대신 정적 팩토리 메소드를 고려하라 라고 나와 있습니다! 그 이유는 생성자를 바로 호출하는 것에 비해 다음과 같은 장점이 있기 때문입니다!!
이름을 붙일 수 있다!
생성자는 이름을 붙일 없는 반면, 정적 팩토리 메소드는 '함수'이기 때문에 이름을 붙일 수 있습니다!
꼭 객체 1개를 반환하거나 그 타입을 반환할 필요가 없다!
정적 팩토리 메소드는 '함수'이기 때문에 그 타입을 조절할 수 있습니다! 예를 들어, 아래와 같이 List를 반환하거나 하위 타입을 반환할 수 있습니다.
companion object {
fun ofList(items: List<Int>): List<객체> {
// 로직...
}
fun ofSrt(train: Train): 하위타입 객체 { // Srt
}
}
함수 안에 다양한 로직을 넣을 수 있다!
객체 생성 과정에서 조건식이 들어가거나 로직이 들어가는 경우 유용하게 활용할 수 있습니다.
<Effective Java>의 해당 내용은 https://hudi.blog/effective-java-static-factory-method/ 에서도 확인하실 수 있습니다!!
답변이 도움이 되었으면 좋겠네요~!! 감사합니다!!! 🙏🙏