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

프로젝트 계획(12-2) 클래스 인터페이스 [소프트웨어공학]

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

클래스의 인터페이스를 이번엔 정의해보려고 한다.

 

그렇다면 왜 중요한지부터 알아봐야겠지?

 

알아보자

 


우선 3가지 정도의 관점이 있는데

1. 클래스 구현

2. 클래스 사용

3. 클래스 확장 

 

차례로 살펴보자

 

1. 클래스 구현

클래스 설계를 보고 프로그래밍 하는 개발자의 관점이다. 클래스 내부 자료구조와 각 오퍼레이션의 프로토타입을 중요하게 생각한다.

 

2. 클래스 사용

클래스를 이용하는 다른 클래스를 개발하는 입장에서는 클래스가 제공하는 오퍼레이션

다시 말해서 public으로 선언된 오퍼레이션에 관심이 있다. 

클래스를 사용할 때 클래스가 제공하는 서비스는 무엇이며 어떻게 호출하고 지켜야 할 약속이 무엇인가인지 알아보는 것이다.

 

3. 클래스 확장

클래스를 확장하는 관점은 개발자의 특수한 관점인데 얘도 public 인터페이스에 관심이 있다. 클래스를 확장하려면 클래스의 동작과 새롭게 확장될 클래스의 서비스를 잘 알아야 한다.

 


클래스 설계 작업에서 각 서브시스템의 서비스는

 

오퍼레이션, 매개변수, 타입, 예외 사항을 포함한 클래스 인터페이스로 정의한다.

 

**서브시스템 사이에 자료를 전달하기 위하여 빠진 오퍼레이션이나 객체를 찾는다.

++ 서비스 명세의 결과는 각 서브시스템의 완벽한 인터페이스 정의가 되어야 한다.

 

서브시스템의 서비스 인터페이스를 API(Application Program Interface)라고 부르는데

많이 들어봤을 것이다. 아님 말고

 

 


클래스 안에 있는 속성값의 범위, 오퍼레이션의 파라미터 값의 범위, 리턴값의 범위 등 클래스의 개발자, 사용자, 확장자가 알아두어야 할 제약사항이 많다. 클래스에 대한 이러한 가정을 공유할 수 있도록 명세한 것이 있는데

 

이를 "협약에 의한 설계(Design by Contract)"라고 한다.

 

협약은 클래스 사용자가 사용 전에 만족시켜야할 조건과 구현할 때 보장하여야 할 조건, 클래스 확장 시 만족시켜야 할 조건을 모두 나타내야 한다.

 

 

++3가지 타입이 있는데 알아보자

 


1. 선행조건(precondition)
• 오퍼레이션이 호출되기 전에 참이 되어야 할 조건


2. 결과조건(postcondition)
• 오퍼레이션이 수행된 후 만족하여야 하는 조건


3. 불변조건(invariant)
• 클래스 내부가 실행되는 동안 항상 만족하여야 하는 조건
• 리스트에 있는 노드가 항상 오름차순으로 되어야 함

 

 

 

 

이 글은 내가 자세히 잘 몰라서...ㅠㅠ 중요하긴 한데.. 감이 잘안와 

그래서 여기까지하고

 

다음 글은 이거하고 관련된 얘기를 해보자

반응형
그리드형