본문 바로가기

정보처리기사

객체지향 분석 모델

객체지향 분석(Object-Oriented Analysis, OOA)

객체지향 분석(Object-Oriented Analysis, OOA)은 소프트웨어 개발에서 사용되는 분석 기법 중 하나입니다. 이 기법은 현실 세계의 객체와 그들 간의 상호작용을 중심으로 소프트웨어 시스템을 분석하고 모델링하는 방법론을 제공합니다. 객체지향 분석은 시스템의 요구사항을 이해하고 명세화하는 과정에서 사용됩니다.

 

개체지향 프로그래밍(Object-Oriented Programming, OOP)

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그래밍 패러다임 중 하나로, 현실 세계의 객체를 소프트웨어의 구성 요소로 모델링하여 프로그램을 작성하는 방법론입니다. 객체지향 프로그래밍은 다음과 같은 주요 특징을 가지고 있습니다:

  1. 클래스(Class)와 객체(Object): 객체지향 프로그래밍에서는 현실 세계의 객체를 클래스(class)라는 추상화된 틀로 정의하고, 이 클래스로부터 생성된 실체를 객체(object)라고 합니다. 클래스는 객체를 생성하기 위한 템플릿으로서, 객체는 클래스의 인스턴스입니다.
  2. 캡슐화(Encapsulation): 캡슐화는 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어 객체 내부의 상태를 보호하는 개념입니다. 이를 통해 데이터의 은닉화가 이루어지고 외부에서 직접 접근할 수 없도록 합니다.
  3. 상속(Inheritance): 상속은 한 클래스가 다른 클래스의 특성(속성과 메서드)을 물려받는 것을 의미합니다. 이를 통해 코드의 재사용성이 증가하고 클래스 간의 계층 구조가 형성됩니다.
  4. 다형성(Polymorphism): 다형성은 같은 이름의 메서드가 다른 형태로 동작하는 능력을 말합니다. 다형성을 통해 코드의 유연성이 증가하고 다양한 상황에 대응할 수 있습니다.

객체지향 프로그래밍은 큰 규모의 소프트웨어를 개발할 때 코드의 재사용성, 유지보수성, 확장성 등을 향상시킬 수 있는 장점을 제공합니다. 또한 현실 세계의 개념을 직관적으로 모델링하여 프로그램을 이해하고 개발할 수 있도록 도와줍니다. Java, C++, Python 등 다양한 프로그래밍 언어에서 객체지향 프로그래밍을 지원하고 있습니다.

 

객체지향 구성요소

  1. 클래스(Class):
    • 클래스는 객체를 생성하기 위한 틀 또는 설계도입니다.
    • 클래스는 객체의 속성과 메서드를 정의하는데 사용됩니다.
    • 객체들 간에 공통된 특성과 동작을 가지고 있으며, 이를 정의하기 위해 사용됩니다.
    • 예를 들어, "사람" 클래스에는 이름, 나이와 같은 속성(attribute)과 걷다, 먹다와 같은 동작(method)이 정의될 수 있습니다.
  2. 객체(Object):
    • 클래스의 인스턴스를 의미합니다.
    • 클래스로부터 생성된 실체로, 메모리에 할당되어 사용됩니다.
    • 각 객체는 고유한 상태를 갖고 있으며, 해당 클래스에서 정의된 속성과 메서드를 가집니다.
    • 예를 들어, "사람" 클래스의 인스턴스로서의 객체는 실제 사람에 해당합니다.
  3. 속성(Attribute):
    • 객체의 상태를 나타내는 데이터를 의미합니다.
    • 클래스에서 정의된 속성은 각 객체가 가지고 있는 고유한 값을 나타냅니다.
    • 예를 들어, "사람" 클래스의 속성으로는 이름, 나이, 성별 등이 있을 수 있습니다.
  4. 메서드(Method):
    • 객체가 수행하는 동작을 정의하는 함수를 의미합니다.
    • 클래스에서 정의된 메서드는 객체의 상태를 변경하거나 특정 작업을 수행합니다.
    • 예를 들어, "사람" 클래스의 메서드로는 걷다, 먹다, 말하다 등이 있을 수 있습니다.
  5. 메시지(Message):
    • 객체들 간에 상호작용을 나타내는 통신 단위입니다.
    • 메시지는 한 객체가 다른 객체에게 특정한 작업을 수행하도록 요청하는 것을 의미합니다.
    • 예를 들어, "사람" 객체가 "먹다" 메서드를 호출하는 것은 "먹다"라는 작업을 수행하도록 "음식" 객체에게 메시지를 보내는 것입니다.

객체지향의 5가지 특징

  1. 캡슐화(Encapsulation): 객체의 상태와 행위를 하나로 묶고, 외부에서의 직접적인 접근을 제한하는 것을 의미합니다.
  2. 상속(Inheritance): 한 클래스가 다른 클래스의 특성(속성과 메서드)을 상속받는 것을 의미합니다.
  3. 다형성(Polymorphism): 같은 이름의 메서드가 다른 형태로 동작할 수 있는 능력을 말합니다.
  4. 추상화(Abstraction): 객체의 공통된 특성을 추출하여 클래스로 정의하는 과정을 의미합니다.
  5. 정보은닉(Information Hiding): 객체의 내부 구현을 외부로부터 숨기고 접근을 제한하는 것을 의미합니다.

 

객체지향 기법에서의 관계성

  1. Is member of (속하는 것): 이 용어는 한 객체가 다른 객체의 구성원이거나 소속되어 있는 경우를 나타냅니다. 이것은 객체가 다른 객체의 일부분으로 간주되는 것을 의미합니다.
  2. Is part of (일부분인 것): 이 용어는 한 객체가 다른 객체의 일부분으로 포함되어 있는 경우를 나타냅니다. 이것은 전체-부분 관계를 나타내며, 전체 객체가 파괴되면 일부분 객체도 파괴될 수 있습니다.
  3. Is a (일종의 것): 이 용어는 상속 관계를 나타냅니다. 한 클래스가 다른 클래스의 일종이거나 특수한 형태인 경우를 나타내며, 이를 통해 클래스 간의 일반화와 특수화 관계를 표현합니다.

 

객체지향 설계원칙SOLID

SOLID는 객체지향 설계의 다섯 가지 기본 원칙을 나타내는 약어입니다. 각 원칙은 소프트웨어 설계를 더욱 견고하고 유연하게 만들어주며, 유지보수성을 향상시키고 확장성을 높입니다. 이러한 원칙은 로버트 C. 마틴(Robert C. Martin)에 의해 소개되었습니다. 다음은 SOLID의 다섯 가지 원칙입니다:

  1. 단일 책임 원칙(Single Responsibility Principle, SRP):
    • 클래스는 하나의 책임만을 가져야 합니다. 즉, 클래스는 변경되어야 할 이유가 하나여야 합니다. 이는 클래스의 응집성을 높이고 유지보수성을 향상시킵니다.
  2. 개방-폐쇄 원칙(Open-Closed Principle, OCP):
    • 확장에는 열려 있고, 수정에는 닫혀 있어야 합니다. 즉, 기존의 코드를 변경하지 않고 새로운 기능을 추가할 수 있어야 합니다. 이는 코드의 안정성을 유지하고 코드 변경으로 인한 부작용을 방지합니다.
  3. 리스코프 치환 원칙(Liskov Substitution Principle, LSP):
    • 서브 타입은 언제나 기반 타입으로 교체할 수 있어야 합니다. 즉, 파생 클래스는 부모 클래스의 기능을 제대로 수행할 수 있어야 합니다. 이는 상속을 안전하게 사용하고 일관성 있는 동작을 보장합니다.
  4. 인터페이스 분리 원칙(Interface Segregation Principle, ISP):
    • 클라이언트는 자신이 사용하지 않는 메서드에 의존하도록 강요받지 않아야 합니다. 즉, 인터페이스는 클라이언트의 요구에 따라 작게 분리되어야 합니다. 이는 인터페이스의 책임을 명확히 분리하여 의존성을 최소화하고 클래스의 응집성을 높입니다.
  5. 의존 역전 원칙(Dependency Inversion Principle, DIP):
    • 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 됩니다. 두 모듈 모두 추상화에 의존해야 합니다. 즉, 의존성 주입(Dependency Injection)을 통해 상위 수준 모듈이 하위 수준 모듈에 종속되지 않도록 해야 합니다. 이는 모듈 간의 결합도를 줄이고 재사용성을 높입니다.

'정보처리기사' 카테고리의 다른 글

개념 모델링  (0) 2024.03.21
분석 모델 검증  (0) 2024.03.21
분석 (참고) 모델  (0) 2024.03.21
요구사항 관리  (0) 2024.03.21
요구사항 개발  (0) 2024.03.21