본문 바로가기
Programming/Spring

스프링(Spring) 프레임워크 기초: OOP를 잘 활용하는 방법 - SOLID 원칙

by vita12321 2023. 7. 25.
728x90
반응형

객체지향 프로그래밍(Object-Oriented Programming, OOP) 소프트웨어 개발에서 광범위하게 사용되는 패러다임  하나입니다. 이번 글에서는 SOLID 원칙을 통해 객체지향 프로그래밍을  효율적으로 수행하는 방법에 대하여 설명하겠습니다.

 

 

 1. 단일 책임 원칙 (Single Responsibility Principle, SRP)

단일 책임 원칙은  클래스와 메소드가  가지 책임만 담당해야 함을 의미합니다. 이를 통해 책임의 분리와 관리가 용이해지며 코드 재사용성이 높아집니다.

public class UserManager {
    public void createUser(String name) {
        // 사용자 생성 로직
    }

    public void deleteUser(int id) {
        // 사용자 삭제 로직
    }
}

public class EmailSender {
    public void sendEmail(Email email) {
        // 이메일 전송 로직
    }
}


2. 개방-폐쇄 원칙 (Open-Closed Principle, OCP)

개방-폐쇄 원칙은 소프트웨어 구성요소가 확장에는 열려있고 수정에는 닫혀 있어야 함을 의미합니다. , 기존 코드의 변경 없이 추가 기능을 제공할 있어야 합니다.

public interface Shape {
    public double area();
}

public class Rectangle implements Shape {
    private double width;
    private double height;

    // 생성자, getArea() 구현
}

public class Circle implements Shape {
    private double radius;

    // 생성자, getArea() 구현
}

public class AreaCalculator {
    public double calculateArea(List<Shape> shapes){
        double totalArea = 0;
        for (Shape shape : shapes) {
            totalArea += shape.area();
        }
        return totalArea;
    }
}

3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP)

리스코프 치환 원칙은 상속 관계에 놓여있는 객체들이 서로 치환 가능해야 함을 주장합니다. , 자식 클래스가 부모 클래스를 완전히 대체할 있어야 합니다.

public class Bird {
    public void fly() {
        // 비행 로직
    }
}

public class Penguin extends Bird {
    // 펭귄은 비행할 수 없음, fly() 메소드 치환
    @Override
    public void fly() {
        throw new UnsupportedOperationException("Penguins cannot fly.");
    }
}

 

4. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP)

인터페이스 분리 원칙은 객체가 자신이 사용하지 않는 메소드에 의존하지 않아야 함을 의미합니다. , 클라이언트마다 필요한 기능만 제공하는 인터페이스를 구성합니다.

public interface Printer {
    void print();
}

public interface Scanner {
    void scan();
}

public class AllInOnePrinter implements Printer, Scanner {
    // print(), scan() 메소드 구현
}

 

5. 의존 역전 원칙 (Dependency Inversion Principle, DIP)

   의존 역전 원칙은 높은 수준의 모듈이 낮은 수준의 모듈에 직접 의존하지 않고 추상화된 인터페이스에 의존함으로써 변경에 유연하게 대응할 있게 됩니다.

public interface Database {
    void query(String sql);
}

public class MySqlConnection implements Database {
    // query() 메소드 구현
}

public class CustomerRepository {
    private Database database;

    public CustomerRepository(Database database) {
        this.database = database;
    }

    public void getCustomers() {
        // 데이터베이스 쿼리 실행
        database.query("SELECT * FROM customers");
    }
}

 

 

SOLID 원칙에 따라 객체지향 프로그래밍을 수행하면 코드의 퀄리티와 확장성이 높아지며, 유지보수의 어려움이 줄어들게 됩니다. 원칙들을 염두에 두고 코딩하는 것이 객체지향 프로그래밍의 성공적인 구현을 위한 핵심입니다."

728x90
반응형