본문 바로가기

신세게 - Java 공부

3주차 배운점 느낀점 - 클래스 다이어그램, 클래스간의 관계

728x90
반응형

3주차 마지막

 

유스케이스 다이어그램을 어제 마무리하고 오늘은 클래스에 다이어그램에 대해배웠다. 과제로 클래스다이어그램 작성하라고 과제 내주셨을 때 그때는 클래스와의 관계를 그냥 선으로 잇기만 하고 각각의 의미가 궁금했었다. 각각 의 관계에 따라 다른 클래스의 객체를 내부에서 생성하는지(의존), 매개변수로 받아서 쓰고버리는지(연관) , 생성된객체를 받는지(집합연관), 내부에서 생성하고 필드에 할당하는지(복합연관) 들에 대해 자세히 알게 되었다.

 

배운점

 

Usecase 마다 명세서 작성

순서대로 작업하는게 중요하다 !!
먼저 명세하고 그림은 제일 마지막에.

클래스 구성요소:
속성, 메소드

 

클래스class


공통의 속성, 메서드(오퍼레이션), 관계, 의미를 공유하는 객체 집합에 대한 기술

 

속성attribute


클래스의 구조적 특성에 이름을 붙인 것
구조적 특성에 해당하는 인스턴스가 보유할 수 있는 값의 범위를 기술
영문 소문자로 시작함

객체지향: 어트리뷰트
자바: 필드, 멤버
라고 부른다. 같은거다.

 

메서드

 

절차지향: 펑션
객체지향: 메서드 라고부름
오퍼레이션이라고도 함
이름, 타입, 매개변수들과 연관된 행위를 호출할 때 제약사항이 요구되는데, 이 제약사항을 명세하는 클래스의 행위적 특징

 

 

그림을보고 -> 코드를 짠다 !

 


표 중요 -> 이걸 이해해야 스프링을 한다!

 

의존은(dependency)
메소드를 통해서(생성자, setter)
컨테이너가 의존관계를 만들어준다. 자동 인젝션
의존: 관계 메서드를 통해 참조해서 관계 맺기
생성자 의존방식, 셋 의존방식

 

연관은(association)
변수를 통해서 참조관계를 만든다.
연관: 강한결합
필드 변수참조해서 연관관계

 

클래스 = entity
설계자의 관점에따라 얼마든지 바뀔 수 있다.

Player 1 - 1 Team
플레이어는 팀을위해 뛴다. .

 

Player Employee - Employer Team
팀에 소속되어있다.

 

팀에 포워드, 디펜더, 키퍼가 팀을 위해 뛴다.
사원과 회사가 연관관계,, 사원은 회사를 위해 일한다.
사원은 회사를 위해 일한다, 존재한다. 고용된다. 다 맞는말 , 다 소속될 수있다. 적을 수 있고 표현할 수 있으면 된다.

 

연관 관계의 다중성
클래스 사이에 연관 관계를 맺는 객체의 수가 1개 이상인 경우
팀 쪽에 붙은 1은 기본값이므로 표현하지 않아도 무방

플레이어가 1명이상 있어야 팀이 된다.1.
한개 팀에 소속되어 플레이할 수 있다.
컴퍼니는 한개이고 임플로이는 한명이상일 수 있다. 한명이상이 컴퍼니에 일한다. 1..

 

집합 관계, 복합관계
연관관계 객체들이 서로 의미있게 연결
독립적이면 집합, 영구적 강한 연관관계

 

집합 관계는 하나의 객체가 독립적인 객체 여러 개로 구성되는 경우
복합 관계는 집합 관계보다 좀더 더 강한 관계로 구성되는 경우 복합 관계는 단독 사용이 불가능하며 반드시 슈퍼 클래스와 함께 사용

 


-----------------------------------ㄴ _이거 그림 화살표 두개 바뀜__

 

차가 없어도 엔진, 휠 ,차채 팔수있다.

 

생명주기가 의존적이거나 아니거나
단독사용불가 차이 !! 독립적으로 자기역할 수행할 수 없다.
붙어있어야 제대로된 롤을 수행할 수 있다 ! 슈퍼 사용 !

 

일반화 관계
상속관계, 한 종류로 묶을 수 있는 관계 즉, a_kind_of의 관계를 의미

 

의존관계
하나의 클래스가 또 다른 클래스를 사용해 영향을 미치는 관계
영향을 일으키는 쪽에 화살표

 

 

의존관계의 조건
한 클래스의 메서드가 다른 클래스의 객체를 인자로 받아 메서드를 사용하는 경우

 public void print(Graphics graphics){ // 의존관계
    // print메소드 통해서 참조값을 호출했다.
    graphics.drawString("Hello Applet",10,20);
  }
  //메소드를 통해 객체 참조값 받아서 사용한다! 

 

한 클래스의 메서드 내부에서 다른 클래스의 객체를 생성하여 그 메서드를 사용하는 경우
다른 클래스의 메서드가 또 다른 클래스의 객체를 반환하는 경우

 

Order -> OrderLine 다른 클래스사용해서 영향미치는 관계

 

연관관계


Phone 계속 유지 . 소중한 나의 폰 , 스프링에선 이걸 권장

public class Person {
  private Phone phone; //연관관계
  //생성자 인젝션

  Person(Phone phone){
    this.phone = phone;
  }
  public void createMessage(){//연관관계
    String message="안녕 반가워. 오늘 몇시에 만날까?";
    String to = "내사랑";
//    폰의 문자 전송기능 호출 this.phone
    this.phone.sendMessage(to,message);
  }
}

 

의존관계
필요할때만 사용하고 쓰는것, 다 볼일보고 끊는것

 public void sendMessage(Phone phone){ //세터(메소드) 인젝션
    String to = "나의 벗";
    String message = "보고싶다.";
    //전달받은 매개변수를통해
    phone.sendMessage(to,message);
  }

 

집약관계(집합연관), 합성관계(복합연관)

 

어그리제이션
한 객체가 다른객체 포함하는 것 , 주 라이프타임 , 부분객체 라이프타임 따로
(카페와이파이)공유객체
컴포직션
부분객체가 전체객체에 속하는 것 , 주객체에 라이프타임 의존함
(핸드폰핫스팟)

 

다른객체와 공유할 수있는. . .
전체객체가 사라지면 (부분객체)와이파이 기능도 사용 못함

(연관관계 안에 집합과 복합이있다.)
->

 

집합연관

private MyNoteBook(Wifi wifi){ //메인한테서 받은 이미생성된 객체
	this.internet = wifi; // 필드 할당
    }

 

복합연관

private MyNoteBook(){
    this.internet = new wifi();
    // 마이놑북클래스 여기서만 , 다른데사용할 수 없다.
    // 필드 할당
    
  }

 

 

 

이 블로그 설명 좋은듯 하다
https://www.nextree.co.kr/p6753/

회고

 

그전에할땐 클래스다이어그램 막 그렸었다. 무슨 화살표가 이래 많나 싶었다. 각각 관계를 이해하고 화살표 모양을 보니 앞으로 이렇게 적용해서 작성해야겠다. 또 각각 하나하나의 관계에 대한 예시 코드를 직접 쳐보니 이해가 잘되었다.

반응형