컴퓨터(Computer Science)/소프트웨어공학(Software engineering)

프로젝트 계획(12-1) 클래스 설계 [소프트웨어공학]

게임이 더 좋아 2020. 5. 20. 01:12
반응형
728x170

클래스는 앞서 많은 글들에서 다루어왔고

 

여기서 말하는 클래스 설계라는 것은 분석 단계에서 아직 확정되지 않은 클래스 내부 부분 중 구현에 필요한 중요한 사항을 결정하는 작업을 말한다.

 

**즉 클래스 추출 및 클래스 간 관계 분석이다.

 

본격적으로 알아보자

 

 


클래스 설계는 각 클래스 내부에 초점을 두어 소속된 객체의 상태가 오퍼레이션의 호출에 따라 어떻게 변하는지를 잘 봐야한다.  다시 말해서 상태와 오퍼레이션의 관계를 잘 봐야한다는 것이다. 

 

**왜냐하면 클래스가 가지는 속성 값에 따라 오퍼레이션 구현이 달라지니까!!

그래서 객체의 상태 변화 모델링 필수라고 할 수 있다.

 

 

**상태 의존적인 클래스를 구현하기 전에 먼저 객체 상태 변화에 대한 모델링은 필수적이다.


클래스 설계에 대한 몇 가지 가이드라인을 살펴보려고 한다.

 

복습이면서 새롭게 생각하는 내용도 있으니 잘 보자

 

 

 

++ 대부분의 클래스 설계는 상속을 이용한다.

또한 상속의 특징 중 하나 다형성이 있는데

똑같은 + 기호를 쓰더라도 숫자 연산이면 더하기를 하고

문자를 쓴다면 문자열 연결을 하고

 

또 면적 계산을 하더라도 삼각형일 때 쓰는 연산, 사각형일 때, 원일 때 다 다르게 연산을 하고

 

같은 함수라도 다르게 변할 수 있다는 것이 다형성이었다. 

 


++ 또 알아둘 것이 있다.

왼쪽 그림과 오른쪽 그림은 같아보이면서 다르다.

 

우선 왼쪽부터, 오버로딩(overloading)부터 보자면

똑같은 이름이라도 들어가는 매개변수가 달라서 구별할 수 있다.

원의 넓이를 구하고 싶으면 area(r)

사각형의 넓이를 구하고 싶으면 area(a,b)

 

똑같은 이름의 메서드이지만 다른 연산을 수행한다

 

그 다음 오른쪽 오버라이딩 (overriding)

++개인적으로 오른쪽이 더 편하다

 

우선 보통 최상위클래스의 area()같은 경우 이름만 있고 내부 구현은 하나도 안되어있다.

**이를 추상 메서드라고 부른다

 

그러니까 area()라는 함수를 공유하지만 각각의 subclass에서 기능을 다르게 구현하는 것이다.

삼각형, 사각형, 원에서의 area()는 이름은 같지만 각각 다르게 구현되어 있다.

 


++ 지금 복습하는 거다. 우린 앞에서 이미 배웠다. ㅎㅎ

 

 

위에 일반화관계다..(오타) 앞에 글을 참고하자 (모델링 파트에서 다루었다)

 


 

위에 있는 그림 그대로 2개로 나눈다. 응집도 향상을 위해 나누는 것이 목적이다.

 

++물론 책임이 2개인지 1개인지는 설계하는 사람이 정한다.

 


 

여기서 인터페이스(interface)란 추상 메서드만 가지고 있는 특별한 형태를 얘기한다.

인터페이스의 추상메서드 의미는 "표준"의 의미를 갖는다.  

 

위의 예처럼

사다리꼴()이라는 기능을 추가할 때는 사다리꼴이라는 "표준"을 또 만들기보다는

"넓이"라는 범주 안에 사다리꼴의 기능을 추가시키는게 좋다는 소리다.

 


Abstract Class(추상클래스) 는 일반 메서드랑 추상 메서드랑 둘다 가지고 있다.

Interface (인터페이스) 는 추상메서드만 가지고 있다.

 

여기서 구체클래스는 subclass를 말한다. 즉 상위클래스 (superclass)를 쓰라는 말이다.

 


보니까 Method A,B,C가 굳이 하나로 모여있지 않아도 되면 나눈다. 

인터페이스를 이용해서 나눈다.

 

이것이 재사용성, 확장성, 유지보수에 유리한 설계를 만드는 것이다.

 

반응형
그리드형