본문 바로가기
TIL

[23.03.24.] 국비지원 풀스택 개발자 과정 - Day 13

by DevPark 2023. 3. 24.
“한 언어를 깊게, 탄탄히 배우면 다른 언어는 독학할 수 있다. 독기로 공부해야한다.” - 강사님

제어자의 종류와 역할

- protected

- public

- package

 

오버라이딩(Overriding)

- 상속시에 적용되는 개념으로 부모로부터 상속 받은 메소드의 구현부를 재정의해서 사용하는 것

- 상속 관계에서 부모의 메소드를 리모델링(외관은 그대로 안에만 변경)

- 메소드명이 동일해야 한다. 메소드의 매개변수 갯수, 데이터 타입 및 순서가 모두 같아야 한다.

- 메소드의 반환 타입도 같아야 한다. 

- 접근지정자는 부모와 같거나 넓어야 한다.

- Exception의 경우 부모 클래스의 메소드와 동일하거나 더 구체적인 Exception을 발생시켜야 한다.

 

- 인스턴스 변수가 부모타입이든 자식타입이든 무조건 오버라이딩한 메소드가 호출된다. 단, 오버라이딩을 하지 않았다면 당연히 상속받은 부모의 메소드가 호출된다.

- 만약 오버라이딩한 메소드 호출시 부모의 메소드를 사용하고자 한다면 super 키워드로 접근해서 재정의 하면된다.

- 부모타입의 인스턴스 변수로 자식에서 새롭게 확장한 멤버(변수,메소드등)에 접근하려면 형변환 해야 한다.

 

오버로딩(Overloading)

- 같은 이름의 메소드를 한 클래스 안에서 여러개 정의 가능( 양념 - 매개변수)

 

이질화(Heterogeneous)

- 두 클래스 사이에 상속관계가 존재할 때 부모 타입의 인스턴스 변수에 자식타입의 메모리 할당해서 그 주소를 저장한다.

- 부모타입 부모타입의 인스턴스변수 = new 자식타입 메모리 할당

- 자식에서 새롭게 정의한 멤버(변수, 메소드 등)는 접근이 불가능하다.

- 메소드의 매개변수를 부모타입으로 정의시 모든 자식타입을 저장할 수 있으므로 자식 클래스 수만큼 메소드를 오버로딩 할 필요없게 된다. ex) Object클래스의 객체 .equals(Object)

- 단, 부모타입의 인스턴스 변수를 자식타입으로  형변환(강제적 형변환 - 다운캐스팅)하면 자식에게 새롭게 정의한 멤버에 접근 가능하다. 

- 동질화든 이질화든 오버라이딩한 메소드가 우선 호출된다.

 

동질화(Homogeneous)

- 같은 타입의 인스턴스 변수에 같은 타입의 메모리 주소를 저장

- 인스턴스 변수로 모든 멤버에 접근가능. 오버라이딩한 메소드가 존재할 경우 부모의 메소드가 아니라 오버라이딩한 메소드가 무조건 호출됨

 

instanceof 연산자

- 두 클래스간의 형 변환이 가능한지 판단하는 연산자이다.
- 해당 인스턴스 변수가 어떤 타입의 변수인지 판단하는 연산자
- 두 클래스간의 상속관계가 있어야 한다. 즉 is a 관계가 성립해야 한다. 당 인스턴스변수가  해당 타입이면  true ,아니면 false
- 형식 : 인스턴스변수 instanceof 클래스타입

- 상속관계 미 존재시 대입 연산 및 형 변환 불가하다. 상속관계가 없을때 instanceOf연산자 사용시 컴파일 에러가 발생한다.

 

참조형 사이의 형변환

 - 두 클래간의 상속관계가 존재할때 형변환이 가능하다.
 - 형 변환시 타입캐스팅 연산자 : (자료형) 사용
 - 부모클래스 -> 자식클래스의 인스턴스에 저장(Down Casting)
 - 자식클래스 -> 부모클래스의 인스턴스 저장(Up Casting) 
 
업 캐스팅  
- 부모의 인스턴스 변수 = 자식의 인스턴스 변수
- 묵시적 형변환 
- 즉 캐스팅 연산자를 사용할 필요가 없다.

다운 캐스팅
- 자식타입의 인스턴스 변수= (자식타입)부모의 인스턴스변수
- 강제적 형변환. 즉, 캐스팅 연산자를 사용한다
-  만약에 부모의 인스턴스변수에 자식의 인스턴스 변수가 저장되어 있지 않다면  다운캐스팅 하더라도 실행시 에러
-  다운캐스팅 조건: 반드시 부모의 인스턴스 변수에 자식의 인스턴스 변수가 저장되어 있어야 한다.

 

Object 클래스

- 자바의 모든 클래스의 최상위 부모는 Object클래스이다.
- Object클래스의 toString()메소드는 객체의 주소를 String으로 반환해주는 메소드다 
- Object클래스의 equals()메소드는 두 객체간의 인스턴스 비교할 수 있다. 즉 주소값 비교,주소가 같으면 true,다르면 false를 반환한다 .

 

Object클래스의 String toString()메소드
- 객체의 주소를 문자열로 반환한다. 패키지명.클래스명@주소(16진수) 
- toString()메소드 오버라이딩 시 반드시 hashCode()메소드도 오버라이딩해야 한다. 

 

 Object클래스의 boolean equals()메소드
- 비교 클래스의 인스턴스변수.equals(대상클래스의 인스턴스변수) 두 객체의 주소비교한다. 

반응형

댓글