반응형
타진
개발 그라운드
타진
전체 방문자
오늘
어제
  • 분류 전체보기 (136)
    • 프로그래밍 (65)
      • Java (28)
      • Android (1)
      • Web (19)
      • Web-Spring (12)
      • R (5)
      • Angular (0)
    • 운영체제 (17)
      • Linux (14)
      • Docker(vmware) (3)
    • 클라우드 (4)
      • aws (0)
      • aws_handson (4)
    • 개발문제해결 (25)
      • Exception (12)
      • 알고리즘 문제풀이 (13)
    • 그 외 개발관련 (23)
    • 일상 (1)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 정올알고리즘 정올 알고리즘
  • transit_gateway
  • 빠른 시작 끄기
  • wsl2
  • chromium edge
  • jdk14
  • Github CLI
  • 문법 체크
  • github actions
  • 4700u
  • GIT
  • stackset
  • 키보드매핑
  • github
  • 빠른 시작 켜기
  • alt tab
  • 일어키보드
  • 라이젠
  • ubuntu terminal
  • docker ps
  • handson
  • 크로미움 엣지
  • cfn
  • docker desktop
  • wsl_update_x64
  • vmmem
  • angular cli
  • transit gateway peering
  • docker
  • AWS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
타진

개발 그라운드

이펙티브 자바 규칙 1 - 정적 팩토리 메소드
프로그래밍/Java

이펙티브 자바 규칙 1 - 정적 팩토리 메소드

2018. 1. 23. 21:40
반응형



자바에서 객체를 만들 때 가장 많이 사용하는 방법은 생성자를 부르는 것이다.


생성자 이외에도 인스턴스 정보를 보내주는 다른 방법이 있다.


책을 읽으면서 나름의 예제코드를 만들어보았다. 만든 예제코드로 한번 알아보자




먼저 예제로 이용할 클래스들이다.



  1. package homework;
  2.  
  3. public class Tv {
  4.  
  5. String screen;
  6. String audio;
  7. int button;
  8.  
  9. public static Tv newInstance(String type){
  10. if (type.equals("SmartTv")) {
  11. return new SmartTv();
  12. } else if (type.equals( "NormalTv" )) {
  13. return new NormalTv();
  14. }
  15. return null;
  16. }
  17.  
  18. public void testTv() {
  19. System.out.println(screen + "스크린, " + audio + "오디오, " + button + "button");
  20. }
  21.  
  22. public String getScreen() {
  23. return screen;
  24. }
  25.  
  26. public String getAudio() {
  27. return audio;
  28. }
  29.  
  30. public int getButton() {
  31. return button;
  32. }
  33.  
  34.  
  35. }
  36.  
  37.  


TV클래스이다.




  1. package homework;
  2.  
  3. public class SmartTv extends Tv {
  4. String screen = "High";
  5. String audio = "A등급 ";
  6. int button = 2;
  7.  
  8. public String getScreen() {
  9. return screen;
  10. }
  11. public String getAudio() {
  12. return audio;
  13. }
  14. public int getButton() {
  15. return button;
  16. }
  17. }
  18.  



스마트TV 클래스이다.





  1. package homework;
  2.  
  3. public class NormalTv extends Tv {
  4.  
  5. String screen = "Low";
  6. String audio = "B등급 ";
  7. int button = 1;
  8.  
  9. public String getScreen() {
  10. return screen;
  11. }
  12. public String getAudio() {
  13. return audio;
  14. }
  15. public int getButton() {
  16. return button;
  17. }
  18.  
  19. }
  20.  



노멀TV 클래스이다.



  1. package homework;
  2.  
  3. public class homework01 {
  4. public static void main(String[] args) {
  5.  
  6. Tv tv1 = Tv.newInstance("SmartTv");
  7. System.out.println("스마트TV: " + tv1.getScreen()+"스크린, " +
  8. tv1.getAudio()+"오디오, " + tv1.getButton()+"개 버튼");
  9.  
  10. Tv tv2 = Tv.newInstance("NormalTv");
  11. System.out.println("노멀TV: " + tv2.getScreen()+"스크린, " +
  12. tv2.getAudio()+"오디오, " + tv2.getButton()+"개 버튼");
  13.  
  14. }
  15.  
  16. }
  17.  




마지막으로 구현 클래스이다.




결과는 위와 같다,





TV 클래스를 보면 생성자가 없다


9행을 보면 정적팩토리 메소드가 사용된 것을 볼 수 있는데


구현클래스에서 7행 Tv.newInstance(문자열) 을 통해서


인스턴스를 전해준 것이다.



이처럼 생성자를 통한 인스턴스 전달방법이 아닌


정적 팩토리 메소드를 통해 인스턴스를 전달하게 되면


먼저 첫번째 장점은 메소드에 이름을 붙일 수 있는 것이다.


알다시피 생성자는 클래스 이름이 들어갈 뿐 명명을 할 수 없다.


위에서는 새로운 인스턴스를 전달해 준다는 의미에서 newInstance로 지었다.


복잡한 클래스에서 어떤 생성자가 어떤 역할을 하는지 잘 알지 못하는 경우


정적 팩토리 메소드로 대체한다면 네이밍으로 인해 사용자를 훨씬 이해하기 쉽게끔 할 수 있다.


두번째는 객체를 생성하지 않을 수 있다는 점이다.


이 방법을 활용한다면 새로운 인스턴스를 전달하는 것 뿐만 아니라 기존에 만들어둔 객체를 활용할 수 있다.


세번째는 sub 타입의 객체도 전달할 수 있다는 점이다.


위 코드를 보면 TV 를 상속받는 Normal Tv와 SmartTV가 있다.


이들의 인스턴스를 TV라는 클래스에서 전달해 준 모습을 확인할 수 있다.


TV의 하위 자료형 객체를 TV라는 클래스에서 직접 전달해 준것이다.



반응형

'프로그래밍 > Java' 카테고리의 다른 글

이펙티브 자바 규칙 4 - 객체 생성은 private 생성자로 막자  (0) 2018.01.27
이펙티브 자바 규칙 3 - 싱글톤  (0) 2018.01.27
이펙티브 자바 규칙 2 - Builder 패턴  (0) 2018.01.24
    '프로그래밍/Java' 카테고리의 다른 글
    • 이펙티브 자바 규칙 5 - 불필요한 객체 만들지 않기
    • 이펙티브 자바 규칙 4 - 객체 생성은 private 생성자로 막자
    • 이펙티브 자바 규칙 3 - 싱글톤
    • 이펙티브 자바 규칙 2 - Builder 패턴
    타진
    타진
    vulnerable1324@gmail.com

    티스토리툴바