• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

companion

22.12.28 20:26 작성 조회수 371

1

안녕하세요 강의 잘 보고 있습니다

 

다름이 아니라 4분대에 나오는 생성자를 companion 으로 바꿔주셨는데.. 이게 더 좋다라고 하시는 이유를 제가 짐작이 안가서 그런데 혹시 간략하게 알려 주실수 있으신가요..?

답변 1

답변을 작성해보세요.

2

안녕하세요, wndqud70님~!!! 😊 아이고~~ 너무 좋은 질문이십니다!!!

말씀해주신 companion object를 사용해 객체를 인스턴스화 하는 방식을 '정적 팩토리 메소드'라고 부르는데요!

<Effective Java 3판 아이템1>을 보면, 생성자 대신 정적 팩토리 메소드를 고려하라 라고 나와 있습니다! 그 이유는 생성자를 바로 호출하는 것에 비해 다음과 같은 장점이 있기 때문입니다!!

  1. 이름을 붙일 수 있다!

    1. 생성자는 이름을 붙일 없는 반면, 정적 팩토리 메소드는 '함수'이기 때문에 이름을 붙일 수 있습니다!

  2. 꼭 객체 1개를 반환하거나 그 타입을 반환할 필요가 없다!

    1. 정적 팩토리 메소드는 '함수'이기 때문에 그 타입을 조절할 수 있습니다! 예를 들어, 아래와 같이 List를 반환하거나 하위 타입을 반환할 수 있습니다.

companion object {
  fun ofList(items: List<Int>): List<객체> {
    // 로직...
  }

  fun ofSrt(train: Train): 하위타입 객체 { // Srt

  }
}
  1. 함수 안에 다양한 로직을 넣을 수 있다!

    1. 객체 생성 과정에서 조건식이 들어가거나 로직이 들어가는 경우 유용하게 활용할 수 있습니다.

 

<Effective Java>의 해당 내용은 https://hudi.blog/effective-java-static-factory-method/ 에서도 확인하실 수 있습니다!!

답변이 도움이 되었으면 좋겠네요~!! 감사합니다!!! 🙏🙏