백엔드 개발자 2024. 3. 17. 17:52

 

다형성이란?


 

다형성 

  • 하나의 특정한 자료형에 여러 종류의 자료형을 가질 수 있는 것. 
  • 상속은 여러 자식 클래스를 만들 수 있게 해주고, 이를 통해 다형성을 구현할 수 있게 된다.( 왜냐하면 부모클래스 자료형에 여러 자식 클래스 객체가 참조될 수 있으므로)

 

 

다형성 예시

//  💡 가능 - 자식 클래스는 부모 클래스에 속함
        Button button1 = new Button("Enter");
        Button button2 = new ShutDownButton();
        Button button3 = new ToggleButton("CapsLock", true);

        //  ⚠️ 불가
        ShutDownButton button4 = new Button("Enter");
        ToggleButton button5 = new ShutDownButton();
  • Button 이라는 부모 클래스에 자식 클래스ShutDownButton 등이 참조되는 모습.
  • 자식 클래스는 부모클래스에 속하는 걸 볼 수 있다.
  • 그러나 자식 클래스에 부모클래스를 참조하거나, 형제클래스끼리 참조는 허용되지 않는다.

 

				//  ⭐️ 편의 : 모두 Button이란 범주로 묶어 배열 등에서 사용 가능
        Button[] buttons = {
                new Button("Space"),
                new ToggleButton("NumLock", false),
                new ShutDownButton()
        };

        for (Button button : buttons) {
						//  ⭐️ 모든 Button들은 func 메소드를 가지므로
            button.func();
				}
  • 다형성이 있기 때문에, 하나의 부모자료형 배열로 자식클래스들을 배열로 참조 가능하다
  • 모든 Button 클래스들은 func메서드를 가지니까, foreach문으로 한번에 처리가 가능. 매우 효율적인 코드로 보인다.

 

 

 

 

 

instanceof 연산자

  • A instanceof B로 하면, A가  B클래스의 자료형에 속하는 인스턴스인지(동일한 클래스이거나 B의 자식 클래스인지) 확인하는 연산자이다.
  • 다형성을 보기에 제격인 메서드
  • toggleButton instanceof Button시 토글버튼은 버튼클래스의 인스턴스이니 true. 

 

 

 

 

 

부모 자료형을 공통으로 사용할 때, 자식 인스턴스내의 기능을 사용해야 하는 경우

				System.out.println("\n- - - - -\n");

				YalcoChicken ycStores[] = {
                new YalcoChicken(3, "판교"),
                new YalcoChicken(17, "강남"),
                new YalcoChickenDT(108, "철원"),

        };

        for (YalcoChicken store : ycStores) {
            if (store instanceof YalcoChickenDT) {
                //  ⭐️ 자식 클래스의 기능을 사용하려면 명시적 타입 변환
                ((YalcoChickenDT) store).takeDTOrder();
            } else {
                store.takeHallOrder();
            }
        }

 

 

  • 여러 자료형을 묶어서 조상 클래스 자료형으로 진행할때 강제 형변환을 해주어야 하는 상황이 있다.
  • 위 상황에서 YalcoChickenDT로 타입변환을 안하면 store는 얄코치킨 인스턴스로 인식되고, 얄코치킨에는 takeDTOrder라는 메서드가 없어서 실패나게 된다.

 

 

 

 

 

Object 클래스

 

    Object obj1 = new Object();

        //  ⭐️ IDE의 안내대로 다른 패키지의 클래스 임포트
        //  💡 해당 클래스의 생성자가 public 이어야 함
        Object obj2 = new YalcoChicken(3, "판교");
        Object obj3 = new ShutDownButton();
        Object obj4 = new FireSlime();

        //  원시 자료형들도 Object의 인스턴스로... - 이후 자세히 배울 것
        Object obj5 = true;
        Object obj6 = 1;
        Object obj7 = "Hello";
  • 모든 클래스의 최고 조상.
  • 모든 자료형을 받아줄 수 있는 자료형.
  • 자바는 구체적으로 사용할 자료형을 명시해서 사용해야 예상치 못한 오류로부터 안전하게 프로그래밍 가능하다.

 

 

 

출처 

  • 사이트, 검색명 (날짜)