FreeHand

클래스 관계 본문

Language/Java

클래스 관계

Jinn 2023. 11. 17. 21:21
일반화 관계(상속 관계)

한 클래스가 다른 클래스를 포함하는 상위 개념일 때를 말한다.
자식 클래스는 부모 클래스의 속성과 연산(메서드)를 물려받을 수 있다.

public abstract class HomeAppliancies {
    
    private int serialNo;
    private String manufacturer;
    private int year;
    
    public abstract void turnOn();
    public abstract void turnOff();
}

public class Washer extends HomeAppliancies {
    
    @Override
    public void turnOn() {
        // ...
    }
    
    @Override
    public void turnOff() {
        // ...
    }
}

public class Tv extends HomeAppliancies {...}

공통 속성과 메서드를 부모 클래스에 정의하여 상속한다. 이때 메서드는 세탁기, TV 등 제품에 따라 조금씩 다를 수 있으므로 추상 메서드로 정의하고 자식 클래스에서 구현하여 사용한다.
 

집합 관계

집약과 합성 두 종류의 집합 관계가 있다.

  • 합성: 전체 객체가 없어지면 부분 객체도 없어진다. 부분 객체를 여러 전체 객체가 공유할 수 없다.
  • 집약: 전체 객체가와 부분 객체의 생명 주기가 다르다. 부분 객체를 여러 전체 객체가 공유할 수 있다.

// 합성 집합 관계
public class Computer {
    
    private CPU cpu;
    private Memory memory;
    private MainBoard mainboard;
    
    public Computer() {
        this.cpu = new CPU();
        this.memory = new Memory();
        this.mainboard = new MainBoard();
    }
}

생성자에 의해 Computer 객체가 만들어지면서 부품 객체들도 같이 생성된다. 또한 Computer 객체가 사라지면 부품 객체도 같이 사라진다. 즉, Computer 객체(전체 객체)와 부품 객체(부분 객체)의 생명 주기가 같다.

// 집약 집합 관계
public class Computer {
    
    private CPU cpu;
    private Memory memory;
    private MainBoard mainboard;
    
    public Computer(CPU cpu, Memory memory, MainBoard mainboard) {
        this.cpu = cpu;
        this.memory = memory;
        this.mainboard = mainboard;
    }
}

외부에서 생성된 부품 객체를 참조하여 Computer 객체를 생성했다. 따라서 Computer 객체와 부품 객체의 생명 주기는 다르다.
 

실체화 관계

인터페이스와 구현 클래스의 관계를 말한다.

비행기와 새의 날 수 있다는 공통 능력을 인터페이스로 정의한다.
 

연관 관계

한 클래스가 다른 클래스를 사용하는 경우이다.

public class Person {
    
    private Car owns;
    
    public void setCar(Car car) {
        this.owns = car;
    }
    
    public Car getCar() {
        return owns;
    }
}

public class Car {
    // ...
}

Person 클래스가 Car 클래스를 사용하고있다. 연관 관계는 클래스의 속성에서 다른 클래스를 참조하는 경우이다.
 

의존 관계

연관 관계와 마찬가지로 한 클래스에서 다른 클래스를 사용한다.
차이점은 의존 관계는 메서드의 인자나 메서드 내부의 지역 객체로 참조하고, 연관 관계는 속성에서 참조한다.

public class Car {
    //...
    
    public void fillGas(GasPump gp) {
        gp.getGas(amount);
        //...
    }
}

 
 

'Language > Java' 카테고리의 다른 글

내부 클래스  (0) 2024.01.06
SOLID  (0) 2023.11.22
Generics  (0) 2023.08.01
[기타] 문자열 붙이기(repeat)  (0) 2023.07.12
String 클래스 메서드  (0) 2023.06.28