꾸양!
일단 시작.
꾸양!
💁‍♀️ 깃허브 링크
전체 방문자
오늘
어제
  • 분류 전체보기 (112)
    • STUDY (85)
      • JAVA (36)
      • Algorithm (1)
      • SpringBoot (9)
      • SQL (4)
      • GIT (16)
      • Front (1)
      • JPA (9)
      • Trouble Shooting (9)
    • SPARTA Project (26)
      • WIL (14)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프로그래머스
  • 인프콘2024
  • 코드효율성
  • 클린코드
  • 숫자짝꿍
  • 랠릿
  • 잔디돌려줘
  • 트러블슈팅
  • intellij
  • Repository
  • 인프런

최근 댓글

최근 글

hELLO · Designed By 정상우.
꾸양!

일단 시작.

STUDY/JAVA

[TIL] 다형성 코드로 익혀보기

2023. 5. 27. 20:19

오늘 다형성에 대한 강의를 듣다가 도저히 이해가 가지 않아서 내 나름대로 코드로 공부를 한 번 해보려고 했다. 직관적으로 알기 쉽게 아래 코드와 같이 부모 클래스는 Parents로 자식 클래스는 Child로 정해서 보기로 했다.

public class Parents {
	public void love() {
	}
}

public class Child extends Parents{
	public void play() {
	}
}

※ instaceof 메서드는 해당 레퍼런스 변수가 형변환이 가능한지 여부를 물을 때 사용된다.


Case 1.

  • 부모 타입 객체를 부모 클래스 생성자로 인스턴스화한다.
  • 인스턴스화 한 객체를 자식 클래스 타입으로 형변환한다.
Parents p1 = new Parents();
// Child c1 = (Child) p1;      --> 오류

p1.love();  // 자신의 메서드인 love 가능.
// p1.play();  --> 오류 : 부모는 자식의 메서드를 쓸 수 없다.

System.out.println( "p1은 Child 클래스로 형변환이 가능합니까?" );
System.out.println( p1 instanceof Child );  // false

>>> Case1을 통하여 부모 클래스 타입은 자식 클래스 타입으로 원래는! 형변환 할 수 없다는 사실을 알 수 있다.


Case 2.

  • 부모 타입 객체를 자식 클래스 생성자로 인스턴스화한다.
  • 인스턴스화 한 객체를 자식 클래스 타입으로 형변환한다.
Parents p2 = new Child();
// 부모클래스 타입은 자식 클래스의 생성자로 생성할 수 있다. 그래도 부모클래스 타입.
Child c2 = (Child) p2;

p2.love();
// p2.play();  -> 오류 : Case 1.과 마찬가지로 부모는 자식의 메서드를 쓸 수 없음.
c2.love();
c2.play();

System.out.println( "p2는 Child 클래스로 형변환이 가능합니까?" );
System.out.println( p2 instanceof Child );  // true
System.out.println( "c2는 Parents 클래스로 형변환이 가능합니까?" );
System.out.println( c2 instanceof Parents );  // true

>>> Case 2를 통하여 부모 클래스 타입은 자식 클래스 타입으로 형변환 할 수 없으나! 인스턴스화할 때 자식 클래스 생성자를 이용하여 생성되면 자식 클래스 타입으로 형변환이 가능함을 알 수 있다.


Case 3.

  • 자식 타입 객체를 자식 클래스 생성자로 인스턴스화한다.
  • 인스턴스화 한 객체를 부모 클래스 타입으로 형변환한다.
Child c3 = new Child();
Parents p3 = (Parents) c3;
// 자식 클래스 타입은 부모 클래스 타입으로 형변환 활 수 있다.

p3.love();
// p3.play();  // 부모는 자식의 메서드를 쓸 수 없다.
c3.love();  // 자식은 부모클래스 메서드 사용 가능
c3.play();  // 자식클래스 자신의 메서드 당연히 사용 가능

System.out.println( "p3는 Child 클래스로 형변환이 가능합니까?" );
System.out.println( p3 instanceof Child );  // true
System.out.println( "c3는 Parents 클래스로 형변환이 가능합니까?" );
System.out.println( c3 instanceof Parents );  // true

>>> Case 3을 통하여 자식클래스 타입에서 부모클래스 타입으로 한 번 형변환이 된 객체는 다시 자식클래스로 형변환이 가능함을 알 수 있다. 아래처럼 형변환을 시켜도 오류가 나지 않는다.

Child c3_2 = (Child) p3;
c3_2.love();
c3_2.play();

Case 4.

  • 자식 타입 객체를 부모 클래스 생성자로 인스턴스화한다. >> 오류가 난다.
Child c4 = new Parents();   // 오류

이렇게까지 직접 예시를 들어가면서 해 보니 객체는 여러가지 다른 형태를 가질 수 있다는 다형성의 의미가 좀 더 쉽게 다가온 것 같다. 여기서 메소드가 여러가지 다른 형태를 띄게 되면 오버라이딩이나 오버로딩으로 보여지는 것이고.

역시 개발은 이렇게 혼자 코드를 직접 해봐야 더 확실히 알 수 있는 것 같다. 오늘도 하나를 배워서 뿌듯!

저작자표시 (새창열림)

'STUDY > JAVA' 카테고리의 다른 글

[TIL] 추상클래스와 인터페이스의 차이.  (0) 2023.05.30
[TIL] 프로그래머스 - 신규 아이디 추천  (0) 2023.05.28
[TIL] 프로그래머스 - 완주하지 못한 선수  (0) 2023.05.26
[TIL] 프로그래머스 - 체육복  (0) 2023.05.23
[TIL] 프로그래머스 - 숫자 짝꿍  (0) 2023.05.22
    'STUDY/JAVA' 카테고리의 다른 글
    • [TIL] 추상클래스와 인터페이스의 차이.
    • [TIL] 프로그래머스 - 신규 아이디 추천
    • [TIL] 프로그래머스 - 완주하지 못한 선수
    • [TIL] 프로그래머스 - 체육복
    꾸양!
    꾸양!
    차근차근 한 발자국씩.

    티스토리툴바