객체지향 개발론 02

2024. 12. 29. 11:40·객채지향 개발론

훌륭한 프로그래머의 자세

훌륭한 프로그래머란 사람이 쉽게 이해할 수 있도록 코드를 작성하는 사람이다. 코딩을 할 때는 항상 미래의 유지보수 담당자가 누구일지 생각하며 작성해야 한다. 이 코드가 무엇을 하는 것인지 쉽게 이해할 수 있도록 명확하고 직관적으로 설계해야 한다. 이를 통해 코드의 품질과 유지보수성을 높일 수 있다.

소프트웨어 개발 프로세스

개발 프로세스란?
소프트웨어 개발의 각 단계에서 "누가, 언제, 무엇을, 어떻게" 해야 하는지를 명확히 규정하는 체계이다. 개발 프로세스는 다음과 같은 목표를 가지고 진행된다:

  • 새로운 소프트웨어를 성공적으로 개발하는 방법론 제공
  • 모든 소프트웨어 개발은 요구사항 분석에서 시작

주요 활동

  1. 분석 (Analysis)
    • 어떤 기능을 수행할 소프트웨어를 개발할 것인지 결정하는 단계
    • "무엇을 할 것인가?"를 명확히 정의해야 하며, 고객 요구사항이 가장 중요
      • 예를 들어, 고객이 원하는 기능이 잘못 정의되면 개발 전체가 실패로 이어질 수 있다.
  2. 설계 (Design)
    • 문제에 대한 해결책을 만들어내는 단계로, 시스템 전체의 구조와 데이터 흐름을 정의
    • 설계의 시작점은 분석이 끝난 시점부터 이어지며, 객체들이 어떤 식으로 상호 협력하게 할 것인가를 고민
    • 목표 해결에 대한 솔루션을 구체화하며, 디자인 모델에 해당되는 두 개의 다이어그램(인터랙션 다이어그램, 클래스 다이어그램)을 작성하는 것이 핵심
    • 인터랙션 다이어그램(동적 모델)이 설계의 주도권을 가지고, 정적인 모델인 클래스 다이어그램은 이를 뒷받침하는 역할을 한다. 행위를 먼저 고민하고 그 행위를 지원할 수 있는 구조를 설계해야 한다.
  3. 구현 (Implementation)
    • 설계에서 정의된 구조를 기반으로 실제 코드를 작성하는 단계
    • 이 단계에서는 코드 품질과 효율성을 유지하는 것이 중요하다.
  4. 테스팅 (Testing)
    • 작성된 코드가 설계대로 작동하는지 확인하는 단계
    • 유닛 테스트는 코드를 작성하는 개발자들이 자주 사용하는 방법으로, 작은 코드 단위를 독립적으로 테스트 한다.

폭포수 모델 (Waterfall Model)

  • 단계적 접근: 분석 → 설계 → 구현 → 테스팅
  • 장점: 간단하고 이해하기 쉬움. 모든 단계가 명확히 정의되어 있음.
  • 단점: 각 단계가 완료된 후에는 돌아갈 수 없기 때문에 유연성이 부족하며, 대규모 프로젝트나 요구사항이 자주 바뀌는 환경에는 적합하지 않음.

애자일 모델 (Agile Model)

  • 유연성 강조: 반복적이고 점진적인 개발 방식을 채택
  • 요구사항 변경 반영: 고객의 피드백과 요구사항 변경에 빠르게 대응 가능
  • 객체지향 개발에서의 중요성: 변화에 유연하게 대응할 수 있는 설계를 지향

객체지향 개발의 핵심

객체지향 개발의 기본 원칙

  1. 유스 케이스 모델링
    • 시스템이 제공해야 하는 기능을 명확히 정의한다.
    • 유스 케이스는 사용자의 요구를 분석하고 이를 시스템 기능으로 변환하는 데 중점을 둔다.
  2. 동적 모델과 정적 모델
    • 동적 모델: 객체들이 런타임에서 상호작용하는 방식을 시뮬레이션한다. 예: 시퀀스 다이어그램
    • 정적 모델: 시스템의 클래스, 속성, 관계를 보여줍니다. 예: 클래스 다이어그램
    • 동적 모델은 시스템의 행위 중심 분석을 가능하게 하고, 정적 모델과 결합하여 전체적인 구조를 완성한다.
  3. 책임 할당 (Assigning Responsibility)
    • 시스템의 각 역할을 담당할 객체를 정의하고, 역할에 맞는 책임을 부여한다.
    • 책임의 올바른 분배는 유지보수성과 확장성의 핵심 요소이다.
  4. 의존성 관리 (Dependency Management)
    • 시스템의 의존성을 줄이고, 객체 간의 결합도를 낮추는 설계를 목표로 한다.
    • 인터페이스 사용, 추상화 계층 도입 등을 통해 의존성을 효과적으로 관리한다.
  5. 디자인 패턴과 원칙 활용
    • 객체지향 설계를 잘하려면 디자인 패턴, 설계 원칙(principles), 그리고 관용구(idioms)를 적절히 활용하는 것이 중요하다. 이를 통해 효율적이고 확장 가능한 설계를 할 수 있다.

객체지향 설계의 장점

  • 분석부터 구현까지의 과정이 논리적이고 매끄럽게 이어질 수 있다.
  • 복잡한 시스템을 단순화하고 재사용성을 높일 수 있다.
  • 유지보수 및 확장이 용이한 시스템을 설계할 수 있다.

UML의 역할

  • UML (Unified Modeling Language): 객체지향 설계를 시각화하고 명세화하는 도구이다.
  • 특징: UML은 표준화된 시각적 언어로, 개발자 간의 의사소통을 원활하게 해준다.
  • 활용: 클래스 다이어그램(구조 표현), 시퀀스 다이어그램(행위 표현), 유스 케이스 다이어그램(요구사항 정의) 등을 포함한다.
  • 시퀀스 다이어그램: 시간의 흐름에 따라 객체 간 메시지의 상호작용을 시각적으로 표현하여 동적 행위를 보여준다.
  • 커뮤니케이션 다이어그램: 시스템의 각 객체가 어떻게 메시지를 주고받는지 보여줍니다. 브레인스토밍 단계에서는 커뮤니케이션 다이어그램이 훨씬 유용할 수 있다.

유스 케이스의 개념과 활용

  1. 유스 케이스란?
    • 하나의 목적을 달성하기 위한 모든 가능한 시나리오를 포함한 사용자-시스템 간의 상호작용을 정의한 것.
    • 성공 시나리오와 실패 시나리오를 포함하여 사용자가 얻는 "관찰 가능한 결과"를 표현
  2. 유스 케이스 작성 방법
    • 이름: 동사를 포함하여 명확한 행동을 나타내는 Goal Statement로 표현한다. 예: "상품 검색", "결제 처리"
    • 구성 요소: 해피데이 시나리오(성공 루트), 예외 시나리오(실패 및 오류 처리).
    • 유스 케이스를 작성할 때 사용자와 시스템의 상호작용을 상세히 기술해야 한다.
  3. 유스 케이스 다이어그램
    • 시스템의 주요 기능과 액터(사용자 또는 외부 시스템) 간의 관계를 시각적으로 표현한다.
    • 액터 간 상속 관계, 유스 케이스 간의 포함/확장 관계 등을 나타낼 수 있다.
  4. 유스 케이스의 유용성
    • 소프트웨어가 없더라도 시스템 사용 방식과 결과를 예측할 수 있다.
    • 클라이언트와 개발자 간 명확한 계약 역할을 한다.
    • 도메인 모델과 시스템 시퀀스 다이어그램의 기초 자료로 활용된다.

도메인 모델의 개념과 주의사항

  1. 도메인 모델의 목적
    • 개발자로서 현실 세계를 이해하고, 이를 시스템에 반영하는 데 필요한 핵심 개념과 관계를 모델링한다.
    • 도메인 모델은 커뮤니케이션 도구로 활용되며, 현실 세계의 이해를 공유하고 검증하는 데 사용된다.
  2. 도메인 모델링의 팁
    • 명사구문 추출법: 텍스트에서 명사를 추출하여 객체 후보를 식별한다.
    • 객체인지 속성인지 구분이 어려우면 일단 객체로 간주하고 점진적으로 수정한다.
    • 도메인 관계는 강한 연관(상속)에서 약한 연관(association)으로 점진적으로 정의한다.
  3. Association (관계)
    • 관계는 객체 간의 연결을 표현하며, 영구적이거나 일시적인 관계로 나눌 수 있다.
    • 관계의 방향성과 역할을 명확히 정의해야 한다.
    • Multiplicity(다중도)는 관계의 범위를 정의하며, 예를 들어 한 사람이 여러 회사를 가질 수 있는지 등을 표현한다.
  4. 도메인 모델의 특성
    • 도메인 모델은 분석 단계에서 현실 세계를 반영해야 하며, 필수적인 요소만 포함하는 것이 좋다.
    • 구현에 영향을 미치지 않는 관계(comprehension-only)도 포함될 수 있다.
    • 도메인 모델에는 정답이 없으며, 프로젝트 특성에 맞게 유연하게 작성된다.

개발 단계별 활동

  1. Inception (도입)
    • 프로젝트의 목적과 범위를 정의하고, 타당성을 검토하는 초기 단계
    • "이 프로젝트를 진행할 것인가?"를 결정하는 것이 핵심
  2. Elaboration (정교화)
    • 주요 요구사항과 리스크를 식별하고, 시스템의 핵심 아키텍처를 설계한다.
    • 프로젝트의 90% 이상을 안정화하며, 리스크를 최소화하는 것을 목표로 한다.
  3. Construction (구축)
    • 실제 코드를 작성하고, 소규모 단위로 개발을 완료하며, 테스트를 통해 기능을 검증한다.
  4. Transition (전환)
    • 제품 릴리스 전에 베타 테스트, 성능 최적화, 사용자 피드백 수집 등의 작업을 수행한다.

마치며

객체지향 개발 방법론은 대규모 소프트웨어 개발에 적합한 설계 및 구현 방식을 제공한다. 분석부터 구현까지의 과정을 반복적이고 점진적으로 수행하며, 유스 케이스와 UML 다이어그램을 활용하여 체계적이고 효율적으로 소프트웨어를 개발할 수 있다. 이를 통해 유지보수성과 확장성이 뛰어난 소프트웨어를 구현할 수 있다.

객체지향 개발을 잘 하려면 많은 연습과 설계 경험이 필요하고 오랜 시간이 걸린다.

객체지향 개발은 단순히 언어를 사용하는 것이 아니라  SOLID 원칙을 준수하고  디자인 패턴을 적절히 활용하여 재사용성과 확장성을 높이고, 테스트 주도 개발(TDD)과 코드 리팩토링을 실천하여 품질을 개선하고, 객체 간의 역할과 책임을 명확히 하여 협력 중심으로 설계해야 한다. 유지보수성과 확장성을 고려한 단순하고 유연한 설계를 목표로 지속적인 연습과 경험을 쌓는 것이 매우 중요하다.

 

기억하자

SOLID원칙준수

디자인 패턴 활용

TDD와 코드 리펙토링

객체간 책임을 명확히 하여 협력중심 설계하기

 

저작자표시 비영리 (새창열림)

'객채지향 개발론' 카테고리의 다른 글

SOLID 원칙 - 객제지향을 잘 하려면 SOLID를 기억해라  (0) 2025.12.21
객체지향 개발론 01  (10) 2024.12.22
'객채지향 개발론' 카테고리의 다른 글
  • SOLID 원칙 - 객제지향을 잘 하려면 SOLID를 기억해라
  • 객체지향 개발론 01
깊은바다속꼬북이
깊은바다속꼬북이
  • 깊은바다속꼬북이
    CodeBlossom
    깊은바다속꼬북이
  • 전체
    오늘
    어제
    • 분류 전체보기 (53) N
      • 라이징 캠프 (4)
      • 객채지향 개발론 (3)
      • 스프링 (10) N
      • 네트워크 (2)
      • 자바 (16)
      • 자료구조 (3)
      • 운영체제 (0)
      • 데이터베이스 (4)
      • 디자인패턴 (7)
      • JSP (1)
      • 개발 알쓸신잡 (2)
      • 일반 교양 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java
    트랜잭션 전파레벨
    객체지향
    자료구조
    JUnnit5
    백엔드
    프로그램밍 언어
    디자인패턴
    개발 철학
    한국어 검색
    MySQL 파서
    java data area
    템플릿 메서드 패턴(Template Method Pattern)
    spring
    JVM
    MySQL 옵티마이저
    junnit5프레임워크
    어댑터 패턴(Adapter Pattern)
    스프링
    jvm 클래스 로더
    GC
    전략 패턴(Strategy Pattern)
    싱글턴 패턴(Singleton Pattern)
    개발 교훈
    jit-compiler
    디자인 패턴
    자바 Socket 클래스
    java 버전별 특징
    mockito라이브러리
    개발자 철학
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
깊은바다속꼬북이
객체지향 개발론 02
상단으로

티스토리툴바