Kim-Baek 개발자 이야기

자바 기본 (15) - 의존 관계, is a, has a 본문

개발/java basic

자바 기본 (15) - 의존 관계, is a, has a

김백개발자 2020. 10. 6. 02:43
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다

※원래 프로그램은 내부에서 연관을 갖고 동작했다.(절차지향적에서) 모듈화를 했다고 해서 그 연관이 사라지는 것이 아니다. 그것을 모듈과의 관계로 표현한다.

◎ 의존관계 (Dependency) 
Association(의존관계) ⊃ has a ⊃ Aggregation ⊃ composition
                                       ⊃ use a
- 의존관계의 의미 : 하나의 객체가 일하기 위해 다른 객체에 의존(필요로 하는) 관계
                                                   ->메소드

메소드, 함수 : 제공하는 기능(println()) <-----call 호출(의존)---  제공받는 곳

- use a 관계 : 단순 사용관계 -> 메소드 내에서 사용하는 관계 -> local 변수로 사용

- has a(포함) 관계 : 하나의 객체가 다른 객체를 자신의 속성으로 가지고 있는 관계 
                             -> Instance 변수(속성)으로 가지고 있는 단계 (계속적으로 사용하기 위해서!)
                                  -> Whole (전체) --- Part (부품)

     Whole(전체) ------ Part (부품)
         부엌          ------ 싱크대, 식탁, 냉장고 : 필수( composition )
                               -- 식기세척기, 냉동고, 토스트기 : 옵션 (Aggregtaion)
※ 싱크대 같은 경우 어떤 상황이냐에 따라 whole or part 가 된다.

-> has a 관계가 Aggregation, Compostion 으로 나뉜다.

◎ Aggregation(집합) 관계
- whole 과 part 객체의 Life Cycle 이 다른 관계
   ※ 객체 Life Cycle : 객체가 생성되는 new ~ 객체의 소멸 까지
   ->  whole 객체 생성시 반드시 part 객체가 생성될 필요가 없는 관계
   -> 반드시 들어갈 필요는 없으나 들어갈 수 있는 공간은 필수적이다.
    ex) 부엌 - 토스트기

◎ Composition 관계 
- Whole 과 part 객체의 Life Cycle이 같은 관게
   -> whole 객체 생성 시 part 객체도 생성되어 포함되어야 하는 관계

◎ Is a 관계
- 상속(Inheritance) : 코드의 재사용, Class 들의 타입을 통일하기 위해 사용
  -> 기존 class 의 내용을 재사용해서 새로운 class 를 만드는것

※ 추상화 (Abstraction) - 공통적인 것을 추출하새 새로운 것을 만드는 것
        -> class 들의 공통적인 속성, 동작을 추출해서 상위계층의 class 를 만드는 것

※ 레퍼런스 타입은 비교가 안되지만 상속관계에서는 비교가 가능하다! 객체 내부의 변수다 메소드의 개수에 상관없이 개념적으로 부모 Class가 더 크다!    :      부모 Class > 자식 Class (type 비교)

변수 = 값 -> 변수가 더 큰 타입이면 컴파일러가 알아서 변환, 값이 더 큰값이면 강제로 작게 캐스팅 해야함 
   ->   Animal a1 = new Dog() ; 가 가능해짐

◎ 다중상속 , 단일상속
- 다중상속 : 두 개이상의 클래스에서 상속을 동시에 받는 것
- 단일상속 : 두 개이상이 있다면 단 하나만 상속을 받는 것
※ Java : Class 간의 상속은 단일 상속만 지원한다 -> 부모 class 는 하나만 가능       
              -> interface 를 통해 다중상속 지원
-> 다중 상속의 경우 두개의 부모클래스에서 똑같은 이름의 A()를 지원한다면 누구것을 써야만 할까? 오류가 날 확률이 높아서 자바는 지원하지 않는다.

-> 상속의 구현 : [ 제한자 ] class 이름 [ extends 부모클래스 명 ]
                                                            -> 생략시 extends Object가 들어감
ex)
public class Animal{ }
public class Dog extends Animal { }
public class CircusDog extends Dog { }

 

반응형
Comments