레퍼런스 (참조형) 형변환
어떤 객체를 다른 타입으로 변환 하는 것( 슈퍼클래스 타입 <-> 서브클래스타입)
업캐스팅 과 다운 캐스팅으로 구분됨
업캐스팅
슈퍼클래스 타입 레퍼런스로 서브클래스의 인스턴스를 참조하는 것
= 서브클래스의 인스턴스를 슈퍼클래스 타입으로 변환 하는 것
컴파일러에 의해 자동 형변환 일어남 (= 묵시적 형변환)
참조 가능한 영역이 축소됨
서브클래스 인스턴스의 멤버 중 공통 항목을 제외한 나머지에 대한 포기 선언을 하는 것
= 대신, 하나의 슈퍼클래스 타입으로 여러 서브클래스 인스턴스를 참조할 수 있다
다운캐스팅
서브클래스 타입 레퍼런스로 슈퍼클래스의 인스턴스를 참조하는 것
슈퍼클래스의 인스턴스를 서브클래스 타입으로 변환하는 것
컴파일러에 의해 자동 형변환이 일어나지 않음
강제 형변환(명시적 형변환) 필수
참조 가능한 영역이 확대됨
존재하지않는 영역에 대한 참조 위험성 때문에 명시적 형변환 후에도 오류(컴파일러)가 발생할 수 있다
이전에 이미 업캐스팅 된 레퍼런스를 다시 다운캐스팅 하는 경우에만 안전하므로 객체간의 상속 관계를 고려하여 캐스팅 해야한다
instanceof 연산자
어떤 객체에 대한 is-a 관계를 판별하는 연산자
주로 if문을 사용하여 형변환이 가능한 지 여부를 판별하는 용도로 사용
연산자 좌변에는 판별에 필요한 객체의 레퍼런스 변수를 지정하고
연산자 우변에는 판별에 필요한 클래스명을 지정
true 이면 형변환 가능 (업 or 다운캐스팅)
false 이면 어떤 방법으로든 형변환 불가
추상메서드
메서드 바디(= 구현부 {})가 없는 메서드 // 바디가 없다 = 호출할 수 없는 메서드
메서드 리턴타입 앞에 abstract 키워드를 사용하여 구현부[] 대신 세미콜론(;) 명시
메서드의 실행할 코드 부분인 구현부가 없으므로 외부에서 호출되면 안되는 메서드
[제한자] abstract 리턴타입 메서드명(파라미터,...);
추상클래스
객체 생성이 불가능한 클래스(=미 완성 클래스)
추상메서드가 호출되면 안되기 때문에 인스턴스 생성을 못하도록 차단
추상메서드를 포함하는 클래스는 반드시 추상클래스로 정의되어야 함
단, 모든 추상 클래스가 추상메서드를 포함하는 것은 아니다
추상클래스는 추상메서드, 일반메서드, 생성자, 인스턴스 변수 등을 가질수 있다
인스턴스 생성은 불가능 하지만 상속은 가능하며, 다형성 활용도 가능(캐스팅)
추상클래스를 상속받는 서브클래스에서는 반드시 추상클래스 내의 추상메서드에 대한 오버라이딩을 수행해야함
=> 오버라이딩 하지 않을 경우 상속 불가
추상메서드에 대한 구현을 강제함으로써 코드의 강제성 및 통일성 제공
[제한자] abstract class 클래스명 {}
final 키워드
변경의 마지막이라는 의미를 부여함
클래스, 메서드, 변수에 사용 가능
final 변수 : 값 변경 금지 = 저장되어 있는 값만 사용 가능 = 상수
=> 일반 변수와 구별하기 위해 이름을 보통 대문자 사용(MAX_NUM)
final 메서드 : 메서드 변경 금지 = 메서드 오버라이딩 금지
=> 상속받아 사용은 가능
final 클래스 : 클래스 변경 금지 = 상속 금지
=> 인스턴스생성을 통해 사용은 가능
상수
변하지 않는 데이터(변수)
보통 클래스 내에서 상수를 선언할 때 public static final 형태로 선언
- public 어느클래스에서나 접근 가능
- static 클래스 로딩 시 함께 로딩되어 인스턴스 생성과 무관함 -> 클래스명만으로 접근가능하며, 모든 인스턴스 변수 데이터 공유
- final 데이터 변경 불가 = 상수
인터페이스(Interface)
클래스가 아님 => 선언부에 class 가 아닌 interface 키워드를 사용
인터페이스가 가질수 있는 요소는
- 상수 (public static final)
- 추상메서드(public abstract)
=> 생성자나 그외의 것들은 가질수 없음
객체 생성이 불가능
=> 대신, 참조형 타입으로 사용 가능하며, 다형성 활용 가능(캐스팅)
서브클래스에서 인터페이스를 상속 받을때는 implements 키워드 사용하며 다중 상속(구현)이 가능하다
인터페이스 끼리 상속할 경우 extends 키워드를 사용하며, 다중 상속 가능
강제성 및 통일성 제공(추상메서드보다 강력한 강제성을 부여)
[접근제한자]interface 인터페이스명{
상수
추상메서드
}
'Language > Java 요약' 카테고리의 다른 글
자바 개념 정리 (0) | 2020.07.02 |
---|---|
6/28 요약 List ~String 관련 클래스 (0) | 2020.06.28 |
Java 0614 정리 / 클래스 ~ 상속 (0) | 2020.06.14 |
0613 Java 정리 2 / 배열 (0) | 2020.06.13 |
0613 Java 정리 / 변수~ 반복문 (0) | 2020.06.13 |