개발방법론

[개발방법론] 객체지향의 기본 원칙(고찰)

IT꿈나무 2023. 11. 21. 13:00
반응형

 다양한 패러다임이 나오고 있고, 패러다임속에서 근본적인 기본 원칙을 지킬 필요가 있다.
기본적인 원칙을 알아보고 실무에 적용해보자.

서론

  엔터프라이즈 시스템(Enterprise System)의 개발은 기술적 복잡함과 비즈니스 로직의 복잡성이 큰 시스템이다. 이러한 요구를 해결하기 위한 방법으로 제시된 EJB(Enterprise Java Bena)는 분산객체 구조를 컴포넌트 기반 개발(CBD:Compontent-Based  Development) 방법을 통해 구현함으로써 컴포넌트의 특성에 따라 코드를 나누었다. EJB에 기반한 CBD 개발 방법론에서는 비즈니스 로직을을 구현할때 코드나 규약이 작성되는 기술 제약이 발생하게 되었고, 애플리케이션이 객체 지향적인 설계를 통해 개발되는데 제약이 발생했다.[1]
 이러한 EJB의 제약사항을 극복하기 위하여 CBD의 문제점을 해결하기위하여 EJB는 POJO 프로그래밍이 가능한 프레임워크인 스프링 프레임워크(Spring Framework)로 발전하였고 POJO(Plain Old java Object) 프로그래밍을 가능기술인 IoC/DI(Inversion of Control/Dependency Injection)와 AOP(Aspect Oriented Programming)을 개발하였다.

본론

   [객체지향 설계의 원칙]

  1. 단일 책임 원칙 (Single Responsibility Principle, SRP): 이미 이전에 설명했지만, 이 원칙은 하나의 클래스나 모듈은 하나의 책임만 가져야 한다는 원칙입니다. 이를 통해 클래스나 모듈이 변경되어야 하는 이유가 단 하나라는 것을 보장하며 코드의 응집성을 높입니다.
  2. 개방-폐쇄 원칙 (Open-Closed Principle, OCP): 이 원칙은 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하지만 변경에는 닫혀 있어야 한다는 원칙입니다. 새로운 기능이 추가될 때 기존 코드를 수정하지 않고도 확장할 수 있도록 설계해야 합니다. 이를 위해 인터페이스와 추상 클래스를 활용하는 경우가 많습니다.
  3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP): 서브 타입(subtype)은 언제나 기반 타입(base type)으로 대체될 수 있어야 합니다. 즉, 파생 클래스는 그것의 기반 클래스를 대체해도 기대 동작을 유지해야 합니다. 이를 통해 다형성과 상속을 올바르게 사용할 수 있습니다.
  4. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP): 이 원칙은 클라이언트가 사용하지 않는 메서드에 의존하지 않아야 한다는 원칙입니다. 즉, 인터페이스는 작고 관련성 있는 메서드로 분리되어야 합니다. 이를 통해 불필요한 의존성을 방지하고 클라이언트 코드를 더 유연하게 만듭니다.
  5. 의존 역전 원칙 (Dependency Inversion Principle, DIP): 이 원칙은 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 모두 추상화에 의존해야 한다는 원칙입니다. 추상화를 통해 모듈 간의 결합도를 낮추고 유연한 코드를 작성할 수 있습니다.

[ POJO(Plain Old java Object)  vs 객체지향 개발방법론]

  1. POJO (Plain Old Java Object):
    • POJO는 특정한 규약이나 인터페이스에 의존하지 않는 간단하고 순수한 자바 객체를 나타냅니다.
    • 주로 경량 프레임워크에서 활용되며, 객체가 특정 프레임워크나 컨테이너에 의존하지 않고 독립적으로 동작할 수 있도록 하는 개념입니다
    •  
public class GradeCalculator {
    // 필드 (데이터를 저장하는 역할)
    private int totalCredits;  // 총 학점
    private double totalGradePoints;  // 총 학점 점수

    // 기본 생성자
    public GradeCalculator() {
        totalCredits = 0;
        totalGradePoints = 0.0;
    }

    // 과목의 학점과 성적을 받아 학점 및 학점 점수를 업데이트하는 메서드
    public void addCourse(int credits, double grade) {
        totalCredits += credits;
        totalGradePoints += credits * grade;
    }

    // 학점 평균을 계산하는 메서드
    public double calculateGPA() {
        if (totalCredits == 0) {
            return 0.0;  // 학점이 없는 경우 학점 평균은 0
        }
        return totalGradePoints / totalCredits;
    }

    // Getter 메서드 (필드 값을 가져오는 메서드)
    public int getTotalCredits() {
        return totalCredits;
    }

    public double getTotalGradePoints() {
        return totalGradePoints;
    }
}
  1. 객체지향 개발 방법론:
    • 객체지향 개발 방법론은 소프트웨어를 객체 지향적인 방식으로 설계하고 개발하는 방법에 대한 원칙과 절차를 제시하는 체계적인 접근 방식입니다.
    • 대표적인 객체지향 개발 방법론에는 UML(Unified Modeling Language)을 활용하는 "UML 기반의 객체지향 분석 및 설계"가 있습니다.
    • 객체지향 개발 방법론은 객체, 클래스, 상속, 다형성 등의 개념을 중심으로 소프트웨어를 모델링하고 설계하는 방법을 강조합니다.

 

결론

나는 잘 모르겠다. 

MVC MVVM 설명 필요함.

 

참고자료
[1] 스프링 프레임워크를 기반으로 POJO 프로그래밍 가능기술의 구현 및 평가

반응형