2023. 9. 26. 20:27ㆍJava언어 공부
클래스 간 관계, 객체 간 관계
클래스 간 관계 : 상속 과 구체화
이를 정적 관계라고 함
정적 관계는 소스 수정 없이는 관계가 바뀌지 않다.
(ex. 클래스와 클래스 간의 상속 관계와 클래스와 인터페이스 간의 구체화 단계가 있다)
객체 간 관계 : 사용 과 포함
이를 동적 관계라고 함
사용 : 한 객체가 어떤 행위를 하기 위해 다른 종류의 객체를 사용할 경우
포함 : 논리적으로 한 객체가 다른 객체를 구성할 경우
(ex. 캐릭터가 무기를 사용한다거나 컴퓨터를 모델링 할 때)
의존 관계
한 클래스를 구현할 때 다른 클래스를 사용할 경우
=> 두 클래스 혹은 객체 간 관계가 있다고 한다.
클래스 간 관계 혹은 객체 간 관계를 생각하지 않고
관계의 수 측면에서 생각하고 이를 의존 관계라고 함.
의존 관계는 적을 수록 좋다.
의존 관계는 일방향이어야 함.
느슨한 관계 => 구체적인 클래스 말고 추상 클래스나 인터페이스 같은
상위 타입과 의존하는게 바람직하다.
Subclassing vs Subtyping
클래스 간 관계를 나눌 때에는 Sublclassing이랑 Subtyping으로 나누기도 한다.
Subclassing : 한 클래스의 상태와 행위의 구현을 재사용한다. (상속 관)
Subtyping : 외부 모습만 재사용함. (구체화 관계)
Subclassing을 하면 Subtyping 효과를 얻을 수도 있다. (예외도 있음)
클래스 간 관계
상속 : 기존 클래스를 이용하여 is-a 관계가 성립하는 특수화된 새 클래스를
정의 할 수 있으며, 이때 새 클래스는 기존 클래스를 상속받는다고 한다.
- 상속은 코드의 재사용을 가능하게 해줌
- 다양한 객체를 처리할 수 있는 공통 리모컨이 생김
구체화 : 한 클래스가 특정 interface를 구현할 수 있으며, 이때 이 클래스는 해당
interface를 구체화하였다고 한다.
- 구체화는 같은 이름을 가진 메소드를 제공하는 객체를 그룹핑하여 줄 수 있다.
- 코드 재사용은 가능하지 않다.
- 상속과 마찬가지로 공통 리모컨이 생긴다.
객체 간 관계
사용 (use-a) : 한 객체가 그것의 행위를 수행하기 위해 다른 종류의 객체를 사용하는 경우
포함 (has-a) : 다른 클래스의 객체를 멤버 변수로 유지하는 경우
집합 / 복합
포함 관계에서 나타나는 종류이다.
집합 : 객체를 받아서 내부 멤버를 초기화한다. (객체가 소멸되도 내부 멤버가 소멸되지 않음)
복합 : 객체 내부에서 내부 멤버를 생성함 (객체가 소멸되면 내부 멤버도 소멸됨)
클래스의 모듈화
클래스가 크면, 일부 멤버 변수와 메소드들을 추출하여 새 클래스를 정의하고,
이 클래스의 객체를 멤버 변수로 추가하여 클래스를 모듈화할 수 있다.
Object 클래스
부모 클래스를 작성하지 않아도 부모 클래스는 없느게 아니라 Object 클래스가 된다.
=> 항상 최상위 조상은 Object 클래스이다.
void f (Object o) 같은 메소드는 모든 종류의 객체를 인자로 전달할 수 있다.
상속 관계 용어
extends : 자식 클래스를 정의할 때 부모 클래스를 상속하는 것을 표시할 때 사용하는 키워드
super : 부모 클래스를 뜻함
추상 클래스
객체를 생성하지 못한다.
하나 이상의 추상 메서드를 포함하는 클래스로, 하위 클래스에게 공통된 동작과
메소드 구현을 강제화한다.
추상 클래스와 메소드는 abstract 키워드를 사용함 (변수는 제외)
초기화
this와 super을 이용한 호출은 항상 생성자의 첫 문장으로 사용해야 한다.
this와 super을 동시에 사용할 수 없다.
public class A{
private int n;
public A(int n){
this.n=n;
}
}
public class B extends A{
private int x;
public B(int x){
this.x=x;
}
}
위 코드는 error가 난다.
이유 :
1. class A에는 생성자가 매개변수 n을 이용한 생성자 밖에 없음.
2. class B는 A를 상속받기 때문에, A의 생성자가 필요로함.
3. A의 생성자는 위에 설명한 하나밖에 없기 때문에, A의 기본 생성자를
따로 정의하지 않는 이상, B의 생성자에도 매개 변수 n을 필요로 한다.
'Java언어 공부' 카테고리의 다른 글
[Java-FX] 2. Java FX와 도형 그리기 (2) (0) | 2023.10.01 |
---|---|
[Java] 13. 자바의 원시 타입 (1) (0) | 2023.09.28 |
[Java-FX] 1. Java FX와 도형 그리기 (1) (0) | 2023.09.24 |
[Java] 8. 클래스(2) (0) | 2023.09.22 |
[Java] 7. 클래스 (0) | 2023.09.18 |