클래스는 앞서 많은 글들에서 다루어왔고
여기서 말하는 클래스 설계라는 것은 분석 단계에서 아직 확정되지 않은 클래스 내부 부분 중 구현에 필요한 중요한 사항을 결정하는 작업을 말한다.
**즉 클래스 추출 및 클래스 간 관계 분석이다.
본격적으로 알아보자
클래스 설계는 각 클래스 내부에 초점을 두어 소속된 객체의 상태가 오퍼레이션의 호출에 따라 어떻게 변하는지를 잘 봐야한다. 다시 말해서 상태와 오퍼레이션의 관계를 잘 봐야한다는 것이다.
**왜냐하면 클래스가 가지는 속성 값에 따라 오퍼레이션 구현이 달라지니까!!
그래서 객체의 상태 변화 모델링 필수라고 할 수 있다.
**상태 의존적인 클래스를 구현하기 전에 먼저 객체 상태 변화에 대한 모델링은 필수적이다.
클래스 설계에 대한 몇 가지 가이드라인을 살펴보려고 한다.
복습이면서 새롭게 생각하는 내용도 있으니 잘 보자
++ 대부분의 클래스 설계는 상속을 이용한다.
또한 상속의 특징 중 하나 다형성이 있는데
똑같은 + 기호를 쓰더라도 숫자 연산이면 더하기를 하고
문자를 쓴다면 문자열 연결을 하고
또 면적 계산을 하더라도 삼각형일 때 쓰는 연산, 사각형일 때, 원일 때 다 다르게 연산을 하고
같은 함수라도 다르게 변할 수 있다는 것이 다형성이었다.
++ 또 알아둘 것이 있다.
왼쪽 그림과 오른쪽 그림은 같아보이면서 다르다.
우선 왼쪽부터, 오버로딩(overloading)부터 보자면
똑같은 이름이라도 들어가는 매개변수가 달라서 구별할 수 있다.
원의 넓이를 구하고 싶으면 area(r)
사각형의 넓이를 구하고 싶으면 area(a,b)
똑같은 이름의 메서드이지만 다른 연산을 수행한다
그 다음 오른쪽 오버라이딩 (overriding)
++개인적으로 오른쪽이 더 편하다
우선 보통 최상위클래스의 area()같은 경우 이름만 있고 내부 구현은 하나도 안되어있다.
**이를 추상 메서드라고 부른다
그러니까 area()라는 함수를 공유하지만 각각의 subclass에서 기능을 다르게 구현하는 것이다.
삼각형, 사각형, 원에서의 area()는 이름은 같지만 각각 다르게 구현되어 있다.
++ 지금 복습하는 거다. 우린 앞에서 이미 배웠다. ㅎㅎ
위에 일반화관계다..(오타) 앞에 글을 참고하자 (모델링 파트에서 다루었다)
위에 있는 그림 그대로 2개로 나눈다. 응집도 향상을 위해 나누는 것이 목적이다.
++물론 책임이 2개인지 1개인지는 설계하는 사람이 정한다.
여기서 인터페이스(interface)란 추상 메서드만 가지고 있는 특별한 형태를 얘기한다.
인터페이스의 추상메서드 의미는 "표준"의 의미를 갖는다.
위의 예처럼
사다리꼴()이라는 기능을 추가할 때는 사다리꼴이라는 "표준"을 또 만들기보다는
"넓이"라는 범주 안에 사다리꼴의 기능을 추가시키는게 좋다는 소리다.
Abstract Class(추상클래스) 는 일반 메서드랑 추상 메서드랑 둘다 가지고 있다.
Interface (인터페이스) 는 추상메서드만 가지고 있다.
여기서 구체클래스는 subclass를 말한다. 즉 상위클래스 (superclass)를 쓰라는 말이다.
보니까 Method A,B,C가 굳이 하나로 모여있지 않아도 되면 나눈다.
인터페이스를 이용해서 나눈다.
이것이 재사용성, 확장성, 유지보수에 유리한 설계를 만드는 것이다.
'컴퓨터(Computer Science) > 소프트웨어공학(Software engineering)' 카테고리의 다른 글
프로젝트 계획(12-3) 클래스 모델링, 재사용 [소프트웨어공학] (0) | 2020.05.20 |
---|---|
프로젝트 계획(12-2) 클래스 인터페이스 [소프트웨어공학] (0) | 2020.05.20 |
프로젝트 계획(12) 상세 설계 - 디자인 패턴 [소프트웨어공학] (0) | 2020.05.11 |
프로젝트 계획(11-2) 미들웨어 [소프트웨어공학] (0) | 2020.05.10 |
프로젝트 계획(11-1) 아키텍쳐 스타일 [소프트웨어공학] (0) | 2020.05.01 |