JAVA 웹개발 과정 국비 70일차 정리

70일차

※ 배우는 과정이므로 정확하지 않을 수 있습니다.
잘못된 점은 알려주시면 수정하도록 하겠습니다!


세미 프로젝트 도중 평가가 있어서 대비하기 위한 수업을 조금 진행했다.
Usecase Diagram은 상대적으로 쉬워서 개인 공부를 과제로 내주셨고, 약간 어려운 개념인 Class Diagram은 수업으로 배웠다.

1. UML

다이어그램을 총칭하는 용어.
자세한 개념은 검색하면 나오니까 생략한다.
클래스 다이어그램도 유스케이스 다이어그램도 UML의 일종인 것이다.

2. Usecase Diagram

개발자에게 의뢰를 하는 클라이언트가 경험이 없을 때 요구사항 명세서를 작성하는 것 보다 먼저 유스케이스 다이어그램으로 요구사항을 표현하기 위해 사용한다.
주 목적은 소통을 위한 것이기 때문에 다양한 형식이 존재한다.

3. Class Diagram

1) tool 설치

이클립스 플러그 인 중 현재는 업데이트가 중지되어 마켓 플레이스에서 찾을 수는 없지만 그래도 괜찮은 툴이 있어서 수동 설치를 진행하여 tool을 설치했다.
이름은 objectaid 이다.
기존에 있는 tool들은 거의 수동으로 작성을 해야하는데, 이 tool은 자동으로 변환해준다.

  1. Help > Install New Software : 마켓 플레이스에 없는 것 수동 설치
  2. Add 클릭
  3. Archive 클릭 > 다운 받은 tool 경로 설정
  4. Name은 대충 지어준다 : Diagram Tool
  5. Add 클릭 > 아래에 ObjectAid UML Explorer 가 생성된다
  6. 체크하고 next로 설치
  7. I accept > Finish > 우측 하단에 설치되는 것 확인
  8. 경고창이 하나 뜨는데 (Security Warning) 위험하면 어떡할꺼냐를 묻는다. Install anyway
  9. 체크박스 체크하고 Accept (체크박스 안뜰수도 있음 괜찮다)
  10. Restart 가 뜨면 이클립스 다시 시작한다.

2) 사용방법

프로젝트에 우클릭 > new > other > class 검색 > ObjectAid UML Diagram 클릭 > Name 쓰고 Finish

실습은 패키지별로 해서 패키지 안에다 각각의 다이어그램을 생성해주었다. 나중에는 프로젝트 안에다가 만들어도 되겠지 뭐!

3) 예제로 보는 관계

① 기본 basic

  • private : -
  • default : ~
  • protected : #
  • public : +
  • static : 언더바
  • 추상메소드 : 이탤릭체

② Generalization : 일반화관계(extends)

관계 is a 를 성립시키는 상속관계에 있을 때
ex) Member Gold, Silver
모양 Gold ㅡㅡ▷ Member (실선)
public class Member {
	private int id;
	private String name;
	private double point;
	
	public Member() {super();}
	public Member(int id, String name, double point) {
		super();
		this.id = id;
		this.name = name;
		this.point = point;
	}
	public int getId() {return id;}
	public void setId(int id) {this.id = id;}
	public String getName() {return name;}
	public void setName(String name) {this.name = name;}
	public double getPoint() {return point;}
	public void setPoint(double point) {this.point = point;}	
}

public class Gold extends Member {}

public class Silver extends Member {}

③ Realization : 실체화관계(implements)

관계 Interface 구현에 의해 발생하는 관계
ex) USBType, ExternalStorage, SmartPhone
모양 SmartPhone - - -▷ USBType(I) (점선)
public interface USBType {
	public void bootup();
}

public class ExternalStorage implements USBType {
	@Override
	public void bootup() {}	
}

public class SmartPhone implements USBType {
	@Override
	public void bootup() {
	}
}

④ Dependency : 의존관계

관계 A 클래스가 B 클래스를 내부적으로 사용하는 관계. 1회용 지역변수를 사용한다.
ex) Human, Fire
모양 Human - - -> Fire (점선)
public class Human {
	public Fire makeFire() {
		return new Fire();
	}
	
	public void cooking1(Fire f) {}
	
	public void cooking2() {
		Fire f = new Fire();
	}
}

public class Fire {}

⑤ Assosiation Aggrigation

관계 A클래스가 B클래스를 지속적(멤버필드)으로 사용하지만, 두 클래스 간 관계가 없을 때(생명주기가 다를 때)
ex) Human, Watch, Glasses
모양 Human ◇ㅡㅡ> Watch
public class Human {
	private Watch watch;
	private Glasses glasses;
	
	public Human(Watch watch, Glasses glasses) {
		this.watch = watch;
		this.glasses = glasses;
	}
	
	public void setWatch(Watch watch) {
		this.watch = watch;
	}
}

public class Watch {}

public class Glasses {}

⑥ Assosiation Aggrigation

관계 A클래스가 B클래스를 지속적(멤버필드)으로 사용하지만, 두 클래스의 생명주기가 같을 때
ex) Human, Heart
모양 Human ◆ㅡㅡ> Heart
public class Human {
	private Heart heart = new Heart();
}
	
public class Heart {}

4) 헷갈렸던 점

  1. dependency VS association
    • 어떤 변수로 사용하느냐!
    • dependency는 지역변수로 사용! (1회용)
    • association은 멤버필드로 사용! (지속적)
  2. association aggregation VS assosication composition
    • 생명주기의 차이!
    • aggregation은 생명주기가 관계가 없을 때, 둘이 따로 놀 때. 예를 들면 사람과 시계, 사람과 안경의 관계이다
    • composition은 생명주기를 공유한다. 예를 들면 사람과 심장의 관계이다.
  3. 이 플러그인은 aggrigation과 composition을 구분하지 않는다.
    • association으로 뭉뚱그려서 보여주는 방식(ㅡㅡ> 실선 오픈 화살표)이 있고,
    • 각각을 나눠서 다이아몬드를 그려주는 방식이 있는데,
    • 이 둘을 혼용해서 쓰지는 않으니 적당히 인식하면 된다.

댓글남기기