티스토리 뷰

[프로그래밍 방법론] 객체 지향 방법론 - 프로그램 잘 설계하기


이 글은 세상을 설계하는 객체 지향 방법론을 정리한 글입니다.


객체 지향 시작하기


위대한 소프트웨어는, 한가지로 정의가 불가능 합니다. 

  • 첫째, 위대한 소프트웨어는 고객을 만족시켜야 합니다. (요구사항 충족). 소프트웨어는 고객이 원하는 기능을 수행해야 합니다. 
  • 둘째, 좋은 소프트웨어는 잘 설계되어 있고, 잘 코딩 되어 있으며, 유지보수와 재사용 그리고 확장이 쉽습니다.


위대한 소프트웨어 만들기 프로세스는 아래와 같습니다.

1) 고객이 원하는 기능을 하도록 하세요.

2) 객체지향의 기본 원리를 적용해서 소프트웨어를 유연하게 만드세요.

3) 유지보수와 재사용이 쉬운 디자인을 위해 노력하세요.


객체 설계시 참고사항

"잘 설계된 객체는 자신의 본래 목적 외에 이용되는 것을 정말 싫어합니다."


1) 객체는 자신의 이름을 나타내는 일을 해야 합니다.

2) 각 객체는 하나의 개념을 나타내야 합니다.

3) 사용되지 않는 속성이 잘못된 설계의 증거입니다.

4) 중복 코드를 볼때마다 캡슐화 할 곳이 있는지를 살펴보세요.


캡슐화란?

객체의 자료와 행위를 하나로 묶고, 실제 구현 내용을 외부에 감추는 것. 캡슐화된 객체의 행위는 외부에서 볼 때는 실제가 아닌 추상적인 것이 되므로 정보 은닉(information hiding) 개념이 지켜진다. 정보 은닉을 통해 다른 객체로부터 접근할 수 있는 것은 메시지 전달을 통해 간접적으로 자료에 접근하지만, 객체 자료에는 직접적으로 접근할 수 없다. 객체지향의 개념. 데이터와 이 데이터를 다루는 방법(method)을 통합한 것으로 정보 은폐의 장점을 가질 수 있다. 

[참고 : 네이버 지식백과]


즉, 캡슐화는 애플리케이션의 나머지 부분으로 부터 여러분의 데이터 일부를 숨기고, 코드의 다른 부분으로 접근할 수 없도록 제한하는 것을 말합니다. 



public class Airplane {

public int speed;

}


public class Jet : Airplane

}


// 사용예

Jet jet = new Jet();

jet.speed = 50;


라는 클래스가 정의되어 있으면, speed는 Airplane 인스턴스를 보유한 어떠한 객체에서도 접근이 가능합니다. 이는 speed를 SetSpeed() 메소드 호출하여 변경할 수 있게 바꿔야할 필요가 있습니다. 


jet.speed의 경우 Airplane을 상속받고 있어 이 클래스에 대한 변수를 사용하게 됩니다. 


캡슐화는 데이터가 부적절하게 정해지는 것으로 부터 보호합니다. 데이터를 직접 접근할 수 없기 때무네 캡슐화된 데이터에 대해 클래스가 계산하거나 확인한 값이 보존됩니다. 


캡슐화는 결론적으로 데이터를 어플리케이션의 행동으로 부터 분리하는 역할을 합니다. 


일반적으로 캡슐화는 데이터의 접근을 제한하기 위한 접근 제한자를 통해서 많이 설정을 합니다. Java에서 지원하는 접근제한자는 private, protected, public이 있습니다. 아래의 표는 해당 변수가 접근 제한자를 통해서 설정이 되었을 때 접근할 수 있는 Scope를 나타냅니다. 


 

 클래스내부

동일 패키지

상속받은 클래스

 이외의 영역

 private

 접근 가능

접근 불가

접근 불가

접근 불가

 protected

 접근 가능

 접근 가능

 접근 가능

접근 불가

   public 

 접근 가능

 접근 가능

 접근 가능

 접근 가능

[출처] JAVA 캡슐화(Encapsulation)|작성자 


5) 위임은 객체가 어떤 일을 할 때 직접 하지 않고 다른 객체가 그 일을 하도록 하는 것을 말합니다. 


요구사항 수집하기


요구사항이란 무엇인가?

시스템이 올바르게 동작하기 위해서 수행하는 특정한 하나의 일을 말합니다. 요구사항에 관한한 가장 좋은 접근 방법은 고객이 말하게 하는 것입니다. 


고객들 조차 자기들이 원하는것이 모르는 경우가 많으므로, 시스템이 해야하는 일을 결정하기 전에 여러 가지 사항을 질문하여 그들이 원하는 것을 알아내야 합니다. 


좋은 요구사항을 얻는 가장 좋은 방법은 시스템이 무엇을 해야 하는지를 이해하는 것입니다. 그렇다면 이러한 요구사항을 정의하는 방법은 무엇일까요? 바로 유스케이스 입니다. 


유스케이스란?

유스케이스는 고객의 특정한 목표를 달성하기 위해 여러분의 시스템이 무엇을 하는지를 기술합니다. 유스케이스는 시스템이나 소프트웨어 변경 사항에 대한 요구사항을 찾아내는 방법입니다. 유스케이스는 특정 목표를 달성하기 위해 시스템이 사용자 혹은 다른 시스템과 어떻게 상호작용을 하는지를 전달하는 하나 이상의 시나리오를 제공합니다. 



모든 유스케이스는 명확한 가치를 가지고 있어야 합니다. 목표달성에 도움이 되지 않는다면 가치가 없는 유스케이스입니다. 또한 유즈케이스는 시작과 끝이 명확해야 합니다. 그리고 액터라고 부르는 외부의 사람이나 시스템이 존재합니다. 


유즈케이스는 단지 시스템이 어떻게 동작하는 지를 말하는 것이기 때문에, 유즈케이스를 통해서 요구사항 수집이 완료가 되면, 코딩 작업을 준비해야 합니다. 


이 글에서는 기본적인 객체지향 개념 중 하나인 캡슐화와 요구사항을 위한 유즈케이스에 대해서 알아보았습니다.


이 글이 도움이 되셨나요?

그렇다면 아래의 그림을 클릭해주세요.



댓글