반응형
객체지향설계의 기본은 객체 간 '참조'이다.
객체지향 프로그램은 객체 간 상호작용으로 특정 '기능'을 구현한다. 상호작용을 하려면 서로의 위치를 알아야한다. 즉 '주소'를 알아야한다. 그래야 원하는 객체에 접근이 가능하다.
연관관계 와 의존관계
주소가 저장되려면 '공간'이 필요하다. 우리는 이를 '참조변수'라 부른다. 참조변수는 메모리에 생성되는데,
Stack 메모리에 생성되는 참조변수
Heap 메모리에 생성되는 참조변수
두 가지가 있다.
객체는 크게 두 부분으로 나뉜다.
1. 필드
2. 메소드
필드는 객체 생성시, Heap 메모리에 저장된다. 메소드는 메소드 호출시, Stack 메모리에 저장된다. 필드의 참조변수는 가비지 컬렉터가 객체를 제거하지 않는 이상, 영속적으로 존재한다. 반면 메소드 내의 참조변수는 메소드 실행 시 생성되었다가 메소드가 끝나면 제거된다.
이를 통해, 객체 간 두 가지 관계가 도출된다.
1. A객체가 B객체에 보편적으로 접근하는 경우 (연관관계)
2. A객체가 B객체에 필요할 때만 접근하는 경우 (의존관계)
public class Computer{
private Cpu cpu = new Cpu(); // 필드 : 연관관계
public void print(Printer newPrinter){
Printer printer = newPrinter; // 메소드 : 의존관계
}
}
예를들어, 컴퓨터라는 객체가 있다. 컴퓨터 객체는 CPU 객체에 항시 접근한다.
반면
프린터 객체는 프린트 시에만 접근한다. 이렇듯, 객체 참조란 두 객체 간의 관계를 명확히 한 후 이루어져야 한다. 프린터 객체를 필드영역에 선언한다면 이는 메모리 낭비가 된다. 필요할 때만, 프린터 객체 주소를 매개변수로 받으면 된다.
참고자료
반응형
'OOP > OOP Basic' 카테고리의 다른 글
[OOP] 일반화(추상화) (0) | 2022.10.17 |
---|---|
[OOP] 캡슐화 (0) | 2022.10.17 |
[OOP] 의존관계 (0) | 2022.10.12 |
[OOP] 합성관계와 집합관계 (0) | 2022.10.12 |
[OOP] 연관관계(2) - Vector의 사용 (0) | 2022.01.30 |