[Spring] SOLID : 객체지향 설계의 5가지 원칙(2) [OCP(Open-Closed Principle) : 개방-폐쇄 원칙]

2023. 5. 10. 02:47·▣ Framework/Spring🍃
728x90
반응형


- OCP(Open-Closed Principle) : 개방-폐쇄 원칙

개방-폐쇄 원칙은 확장에는 열려 있고 변경에는 닫혀 있어야 한다는 원칙이다. 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계해야 하며, 변경에 유연하면서도 안정적인 시스템을 만드는 데 도움을 준다.

아래는 개방-폐쇄 원칙이 위배된 코드이다.

 

public class Product {
    private String name;
    private double price;
    private String type;

    /* Constructor, getters, and setters */

    public double calculateDiscount() {
        if (this.type.equals("book")) {
            return this.price * 0.05;
        } else if (this.type.equals("toy")) {
            return this.price * 0.1;
        } else if (this.type.equals("electronics")) {
            return this.price * 0.15;
        } else {
            return this.price * 0.02;
        }
    }
}

 

위의 코드에서 calculateDiscount() 메서드에서 상품의 유형(type)에 따라 할인률을 계산하고 있다. 만약 새로운 상품 유형이 추가된다면, calculateDiscount() 메서드를 수정해야 한다.

아래는 개방-폐쇄 원칙이 적용된 코드이다.

 

public abstract class Product {
    private String name;
    private double price;

    /* Constructor, getters, and setters */

    public abstract double calculateDiscount();
}

public class BookProduct extends Product {
    @Override
    public double calculateDiscount() {
        return this.getPrice() * 0.05;
    }
}

public class ToyProduct extends Product {
    @Override
    public double calculateDiscount() {
        return this.getPrice() * 0.1;
    }
}

public class ElectronicsProduct extends Product {
    @Override
    public double calculateDiscount() {
        return this.getPrice() * 0.15;
    }
}

public class OtherProduct extends Product {
    @Override
    public double calculateDiscount() {
        return this.getPrice() * 0.02;
    }
}

 

위의 코드에서는 Product를 추상 클래스로 만들고, calculateDiscount()를 추상 메서드로 선언하였다.
 
이렇게 함으로써, 새로운 상품 유형이 추가되더라도 해당 유형에 대한 할인률을 계산하는 새로운 클래스만 만들면 되므로 기존 코드를 수정할 필요가 없어진다.

728x90
반응형
'▣ Framework/Spring🍃' 카테고리의 다른 글
  • [Spring] SOLID : 객체지향 설계의 5가지 원칙(4) [ISP(Interface Segregation Principle) : 인터페이스 분리 원칙]
  • [Spring] SOLID : 객체지향 설계의 5가지 원칙(3) [LSP(Liskov Substitution Principle) : 리스코프 치환 원칙]
  • [Spring] SOLID : 객체지향 설계의 5가지 원칙(1) [SRP(Single Responsibility Principle) : 단일 책임 원칙]
  • [Spring] SOLID란? [객체지향 설계의 5가지 원칙]
예르미(yermi)
예르미(yermi)
끊임없이 제 자신을 계발하는 개발자입니다👨🏻‍💻
  • 예르미(yermi)
    예르미의 코딩노트
    예르미(yermi)
  • 전체
    오늘
    어제
    • 분류 전체보기 (1053)
      • ◎ Java (133)
        • Java☕ (93)
        • JSP📋 (26)
        • Applet🧳 (6)
        • Interview👨🏻‍🏫 (8)
      • ◎ JavaScript (48)
        • JavaScript🦎 (25)
        • jQuery🌊 (8)
        • React🌐 (2)
        • Vue.js🔰 (6)
        • Node.js🫒 (3)
        • Google App Script🐑 (4)
      • ◎ HTML5+CSS3 (17)
        • HTML5📝 (8)
        • CSS3🎨 (9)
      • ──────────── (0)
      • ▣ Framework (67)
        • Spring🍃 (36)
        • Spring Boot🍀 (12)
        • Bootstrap💜 (3)
        • Selenium🌕 (6)
        • MyBatis🐣 (10)
      • ▣ Tools (47)
        • API🎯 (18)
        • Library🎲 (15)
        • JitPack🚀 (3)
        • Jenkins👨🏻 (7)
        • Thymeleaf🌿 (4)
      • ▣ Server (30)
        • Apache Tomcat🐱 (14)
        • Apache HTTP Server🛡️ (1)
        • Nginx🧶 (7)
        • OracleXE💿 (4)
        • VisualSVN📡 (4)
      • ▣ Infra & DevOps (36)
        • LGTM Stack🔭 (5)
        • Kafka🐦‍🔥 (3)
        • Kubernetes🚢 (10)
        • KubeCon Japan 2026⚓ (18)
      • ▣ OS : 운영체제 (18)
        • cmd : 명령프롬프트💻 (10)
        • Linux🐧 (8)
      • ▣ SQL : Database (56)
        • Oracle SQL🏮 (26)
        • PL SQL💾 (9)
        • MySQL🐬 (6)
        • MariaDB🦦 (6)
        • H2 Database🔠 (3)
        • SQL 실전문제🐌 (6)
      • ────────── (0)
      • ◈ Human Project (86)
        • Mini : Library Service📚 (15)
        • 화면 설계 [HTML]🐯 (10)
        • 서버 프로그램 구현🦁 (15)
        • Team : 여수어때🛫 (19)
        • Custom : Student🏫 (9)
        • Custom : Board📖 (18)
      • ◈ Yermi Project (57)
        • 조사모아(Josa-moa)📬 (5)
        • Riddle-Game🧩 (6)
        • 맛있을 지도🍚 (2)
        • 어디 가! 박대리!🙋🏻‍♂️ (5)
        • 조크베어🐻‍❄️ (4)
        • Looks Like Thirty🦉 (2)
        • Toy Project💎 (12)
        • 오픈소스 파헤치기🪐 (5)
        • 오늘가챠🃏 (16)
      • ◈ Refactoring (15)
        • Mini : Library Service📚 (8)
        • 서버 프로그램 구현🦁 (1)
        • Team : 여수어때🛫 (0)
        • 쿼리 튜닝일지🔧 (6)
      • ◈ Coding Test (80)
        • 백준(BOJ)👨🏻‍💻 (71)
        • 프로그래머스😎 (2)
        • 코드트리🌳 (7)
      • ◈ Study (130)
        • 기초튼튼 개발지식🥔 (25)
        • HTTP 웹 지식💡 (4)
        • 클린코드(Clean Code)🩺 (1)
        • 디자인패턴(GoF)🥞 (12)
        • 알고리즘(Algorithm)🎡 (14)
        • 다이어그램(Diagram)📈 (4)
        • 파이썬(Python)🐍 (16)
        • 에러노트(Error Note)🧱 (35)
        • 웹 보안(Web Security)🔐 (11)
        • 인공지능 AI🛸 (8)
      • ◈ 공부모임 (60)
        • 혼공학습단⏰ (18)
        • 코드트리 챌린지👊🏻 (2)
        • 개발도서 100독👟 (8)
        • 나는 리뷰어다🌾 (20)
        • 국가기술자격 서포터즈🌻 (12)
      • ◈ 자격증 공부 (48)
        • 정보처리기사🔱 (16)
        • 정보처리산업기사🔅 (9)
        • 정보보안기사⚜️ (11)
        • 컴퓨터활용능력 1급📼 (12)
      • ─────────── (0)
      • ◐ 기타 (124)
        • 알아두면 좋은 팁(tip)✨ (46)
        • 개발자의 일상🎈 (55)
        • 개발도서 서평🔍 (10)
        • 개발관련 세미나🎤 (2)
        • 블로그 꾸미기🎀 (9)
        • 사도신경 프로젝트🎚️ (2)
  • 인기 글

  • 최근 댓글

  • 반응형
    250x250
  • 태그

    자바스크립트
    javascript
    코딩
    spring boot
    백준 티어
    코딩 테스트
    프로그래밍
    Java
    spring
    꿀팁
    Oracle
    SQL
    Error Note
    Database
    Project
    BOJ
    jsp
    일상
    백준
    CSS
  • hELLO· Designed By정상우.v4.10.3
예르미(yermi)
[Spring] SOLID : 객체지향 설계의 5가지 원칙(2) [OCP(Open-Closed Principle) : 개방-폐쇄 원칙]
상단으로

티스토리툴바