Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

archive

[이것이 자바다] 07 상속 - 2 본문

Java/Java 개념 정리

[이것이 자바다] 07 상속 - 2

안정민 2023. 5. 8. 13:38

1. 자동 타입 변환 (Promotion)

- 자동적으로 타입 변환이 일어나는 것

- 자동 타입 변환이 일어날 조건

부모타입  변수  =  자식타입객체 ;

즉, 자식타입의 객체가 상위 타입인 부모타입의 변수에 대입되는 경우 자동 타입 변환이 일어남

- 자식은 부모의 특징과 기능을 상속받기 때문에 부모와 동일하게 취급될 수 있음, 예를들어 고양이가 동물의 특징과 기능을 상속받았다면 '고양이는 동물이다' 가 성립하게 된다.

- 따라서 Cat 객체를 Animal 타입의 변수에 대입하면 자동 타입 변환이 일어난다.

Cat cat= new Cat();
Animal animal=cat; 
//cat은 자동 타입 변환이 일어나 Animal 타입의 변수 animal에 대입이 가능해진다.

- Animal animal=new Cat(); 의 코드와 같이 바로 new 연산자로 객체 생성을 하는 것도 오류 없이 작성 가능하다.

- 여기서 cat과 animal 변수는 타입만 다를 뿐이지 동일하게 Cat 객체를 참조한다.

-그렇기 때문에 두 참조 변수의 동등 비교 연산자 (==)의 결과는 true가 나온다.

cat == animal ;
//true

- 바로 위의 부모가 아니더라도 상속 계층에서 상위 타입이라면 자동 타입 변환이 일어날 수 있다.

-부모 타입으로 자동 타입 변환된 이후에는 부모 클래스에 선언된 필드와 메소드만 접근이 가능하다.

-비록 변수는 자식 객체를 참조하지만 변수로 접근 간으한 멤버는 부모 클래스 멤버로 한정한다

-그러나 자식 클래스에서 오버라이딩한 메소드가 있다면 부모 메소드 대신 오버라이딩 된 자식 메소드가 호출됨, 이는 다형성(Polymorphysm)과 관련이 있기 때문에 잘 알아두어야 한다.

 

 

2. 강제 타입 변환 (Casting)

- 자식 타입은 부모 타입을 자동 변환하지만 반대로 부모 타입은 자식 타입으로 자동 변환되지 않음

- 대신 다음과 같이 캐스팅 연산자로 강제 타입 변환이 가능함

자식타입  변수  =  (자식타입) 부모타입객체 ;
                            캐스팅 연산자

- 그렇다고 해서 부모 타입 객체를 자식 타입으로 무조건 강제 변환을 할 수 있는 것은 아님, 자식 객체가 부모 타이브로 자동 변환이 된 후 다시 자식 타입으로 변환할 때 강제 타입 변환을 사용할 수 있음

Parant parant=new Child(); // 자동 타입 변환
Child child = (Child) parant; // 강제 타입 변환

-자식 객체가 부모 타입으로 자동 변환이 되면 부모 타입에 선언된 필드와 메소드만 사용가능하다는 제약 사항이 따름, 만약 자식 타입에 선언된 필드와 메소드를 꼭 다시 사용해야 한다면 강제 타입 변환을 해서 다시 자식 타입으로 반환해야 한다.

 

 

3. 다형성(Polymorphism)

- 다형성이란 사용 방법은 동일하지만 실행결과가 다양하게 나오는 것을 의미

- 객체의 사용 방법이 동일하다는 것은 동일한 메소드를 가지고 있다는 것, 예를 들면 한국타이어와 금호타이어는 모두 타이어를 상속하고 있음, 그렇다면 한국타이어와 금호타이어는 타이어의 메소드를 동일하게 가지고 있다는 것을 의미한다.

-만약 한국타이어와 금호타이어가 타이어의 메소드를 오버라이딩 하고 있다면, 타이어 메소드 호출 시 오버라이딩 된 메소드가 호출이 되게 되는데, 오버라이딩 된 두 타이어가 다르기 때문에 실행 결과가 다르게 나옴, 이것이 바로 다형성이다.

-다형성을 구현하기 위해서는 자동 타입 변환과 메소드 재정의가 필요하다

자동타입변환 + 메소드 오버라이딩 다형성

-필드 다형성

-필드 다형성은 필드 타입 (사용 방법)은 동일하지만, 대입되는 객체가 달라져서 실행 결과가 다양하게 나올 수 있음을 의미

-

 

 

 

4. 객체 타입 확인

- 매개변수의 다형성에서 실제로 어떤 객체가 매개값으로 제공되었는지 확인하는 방법 -> instanceof 연산자 활용

- instanceof 연산자의 좌항에는 객체가 오고 우항에는 타입이 오는데, 좌항의 객체가 우항의 타입이면 true, 그렇지 않으면 false를 산출

++ 얘 잘하면 if문 조건 부분 활용해서 서술하라는 문제 나오겠다

boolean  result  =  객체  instanceof  타입 ;

-예를 들어 다음 코드는 Child 타입으로 강제 타입 변환하기 전에 매개값이 Child 타입인지 여부를 instanceof 연산자로 확인, Child 타입이 아니라면 강제 타입 변환을 할 수 없기 때문

-강제 타입 변환을 하는 이유는 Child 객체의 모든 멤버를 접근하기 위해서

public void method(Parant parant){
	if(parant instanceof Child)
    	Child child = (Child) parant;
}
//parant 매개변수가 참조하는 객체가 Child인지 조사

-Java12부터는 instanceof의 결과가 true일 경우, 우측 타입 변수를 사용할 수 있기 때문에 강제 타입 변환이 필요가 없다

if(parant instanceof Child child){
	//child 변수 사용
}

 

 

 

 

 

6. 봉인된 클래스 (sealed class)

-

 

 

 

 

 

// 와 이부분 미친 거 같은게 분명히 중간고사 시험 유형처럼 코드 개많이 주고 에러나는 코드 찾으라고 할 거 같음

대가리 터지겠다 진짜 확실히 알아두고 체화해서 시험 쳐야할 듯

진짜 기말고사는 미리미리 준비해야겠듬...