1. 업캐스팅(Upcasting), 다운캐스팅(Downcasting) 이란?
-캐스팅(Casting) : 타입을 변환하는 것이며 형변환이라고도 한다. 자바의 상속 관계에 있는 부모와 자식 클래스 간에는 서로 간의 형변환이 가능하다.
-업캐스팅(Upcasting) : 자식 클래스에 있는 객체가 부모 클래스 타입으로 형변환 되는 것을 말한다.
-다운캐스팅(Downcasting) : 업캐스팅과 반대인 캐스팅을 다운캐스팅이라고 한다. 업캐스팅된 것을 다시 원상태로 돌리는 것을 말한다. 하위 클래스로의 다운캐스팅을 할 때는 타입을 명시적으로 지정해줘야 한다.
2. 추상클래스 (Abstract Class) 구상클래스 (Concrete Class) 인터페이스 (Interface)이란?
1) 추상클래스.
- 추상 클래스(abstract class)는 하나 이상의 추상 메서드(abstract method)를 포함하는 클래스이다.
- 추상 메서드는 선언만 있고, 선언부에 ‘abstract’라는 키워드를 붙인다.
- 추상 메서드가 포함되었다면 클래스도 추상 클래스이므로 클래스명 앞에 ‘abstract’ 키워드를 붙여야 한다.
- 추상 클래스는 다른 하위 클래스를 상속하기 위한 용도이다.
- 추상 클래스에서 매개변수 생성자 메소드가 필요한 이유는 추상 클래스는 하위 클래스에 상속을 목적으로 만들어진
클래스이기 때문에, 하위 클래스에서 상위 클래스에 만들어둔 매개변수 생성자 메서드를 통하여 인스턴스 변수의 값을
초기화하기 때문이다.
- 추상 클래스는 미완성클래스이기 때문에 인스턴스를 생성할 수 없다.
2) 구상클래스 (Concrete Class)
- new 연산자를 사용하여 인스턴스를 생성할 수 있는 클래스를 Concrete(구상) 클래스라고 한다.
- 미완성클래스인 추상클래스에 정의된 기능을 구현하는 클래스이다.
3) 인터페이스 (Interface)
- 클래스의 공통된 기능을 정리한 명세서이다.
- 모든 기능을 추상화로 정의만 하고 구현은 하지 않은 것이다.(100% 추상 메서드)
- 추상클래스와의 차이점은 추상클래스는 IS - A "~이다"이고, 인터페이스는 HAS - A "~을 할 수 있는"의 의미를 가지고
있다. 이 말이 굉장히 중요한데, 추상클래스는 클래스이기 때문에 상속을 한 번만 하며, 상속을 통해 서브클래스에서 구현을 완성하기 위한 클래스이지만, 인터페이스도 구상클래스를 생성하여 상속을 하는 것까지는 동일하지만 인터페이스의 특성상 다중상속도 가능하다는 점에서 차이를 보인다.
4) 인터페이스 (interface)를 사용하는 이유?
- 협업을 할 때 미리 인터페이스를 작성함으로써 메서드를 정할 수 있다.
- 클래스 간 결합도(코드 종속성)를 낮춘 유연한 방식의 프로그래밍이 가능해진다.
- 자바에서는 다중 상속을 구현하기 위해서 사용한다.
- 기능과 구현의 분리를 하기 위해 사용한다.**
*객체 지향 설계 방법론
- 응집도 ↑(하나의 메서드에는 하나의 기능을 구현한다.), 결합도 ↓(각각의 클래스가 독립적인 관계가 아니라 코드 간 종속
관계를 말한다.)
- 인터페이스로 기능과 구현을 분리하는 이유는 클래스의 변경이 있을 때, 클래스를 호출한 곳에서 변경을 최소화할 수 있는 유연한 프로그래밍을 할 수 있다.
3.Generlization(일반화)
-슈퍼클래스와 서브클래스 간의 Inheritance(상속) 관계를 나타낸다. 여기서 Generalization이란 서브 클래스가 주체가 되어
서브 클래스를 슈퍼 클래스로 Generalization 하는 것을 말하고 반대의 개념은 슈퍼 클래스를 서브 클래스로 Specialize
(구체화)하는 것이다. 상속은 슈퍼 클래스의 필드 및 메서드를 사용하며 구체화하여 필드 및 메소드를 추가하거나 필요에
따라 메소드를 overriding(오버라이딩)하여 메소드 재정의를 한다. 또는 슈퍼클래스가 추상클래스인 경우에는 인터페이스의 메소드 구현과 같이 추상 메소드를 반드시 오버라이딩 하여 구현해야 한다.
1) Realization 관계
- 인터페이스의 Spec(명세, 정의)만 있는 메서드를 오버라이딩하여 실제 기능으로 구현하는 것을 말한다.
- IS-A 관계와 달리 Realization 관계는 서로 관련성 없는 클래스 간에도 공통된 기능을 구현할 수 있다.
2) Dependency(의존)
- Dependency는 클래스 다이어그램에서 일반적으로 제일 많이 사용되는 관계로서, 어떤 클래스가 다른 클래스를 참조하는 것 을 말한다.
3) 인터페이스 (interface) 문법
접근제어자 interface 인터페이스이름 {
public [abstract] 리턴타입 메서드이름 ( 매개변수목록 );
'궁금한 개발관련지식' 카테고리의 다른 글
img태그 background-img 의 차이점 (0) | 2023.08.26 |
---|---|
프레임워크와 라이브러리는 무엇인가? (0) | 2023.08.15 |
logic, java에서 변수의 종류 (0) | 2023.07.30 |