이 문서는 Google Cloud Translation API를 사용해 자동 번역되었습니다.
어떤 문서는 원문을 읽는게 나을 수도 있습니다.
개발자는 항상 더 나은 코드를 작성하는 방법을 찾고 있습니다. 이를 달성하는 한 가지 방법은 SOLID 원칙을 따르는 것입니다.
SOLID는 Robert C. Martin이 개발한 5가지 객체 지향 설계 원칙의 약어입니다.
이 기사에서는 이러한 원칙을 Spring Boot 개발에 적용하는 방법을 살펴보겠습니다.
단일 책임 원칙에 따르면 클래스는 변경해야 할 이유가 하나만 있어야 합니다. 즉, 클래스는 하나의 책임만 가져야 합니다.
예를 들어 데이터베이스 액세스와 비즈니스 로직을 모두 처리하는 클래스가 있다고 가정해 보겠습니다. 데이터베이스 액세스 코드를 변경해야 하는 경우 원하지 않더라도 비즈니스 논리 코드도 변경해야 합니다. 이는 단일 책임 원칙에 위배됩니다.
이를 설계하는 더 좋은 방법은 두 개의 별도 클래스를 만드는 것입니다. 하나는 데이터베이스 액세스용이고 다른 하나는 비즈니스 논리용입니다. 이렇게 하면 비즈니스 논리 코드를 건드리지 않고도 데이터베이스 액세스 코드를 변경할 수 있습니다.
개방-폐쇄 원칙에 따르면 클래스는 확장에는 열려 있지만 수정에는 닫혀 있어야 합니다. 즉, 클래스의 코드를 수정하지 않고도 클래스를 확장할 수 있어야 합니다.
예를 들어 고객 주문을 처리하는 클래스가 있다고 가정해 보겠습니다. 고객이 주문을 취소할 수 있는 새로운 기능을 추가할 수 있습니다. 기존 코드를 수정하지 않고 이 기능을 추가할 수 있는 방식으로 클래스가 설계되지 않은 경우 개방-폐쇄 원칙을 위반하는 것입니다.
이를 설계하는 더 좋은 방법은 추상 cancel() 메서드를 사용하여 추상 Order 클래스를 만드는 것입니다. 그런 다음 Order를 확장하고 cancel() 메서드의 구체적인 구현을 제공하는 구체적인 CustomerOrder 클래스를 만들 수 있습니다. 이렇게 하면 기존 코드를 수정하지 않고도 취소 기능을 추가할 수 있습니다.
Liskov 대체 원칙은 하위 유형이 해당 상위 유형을 대체할 수 있어야 함을 나타냅니다. 즉, 코드를 손상시키지 않고 상위 유형 대신 하위 유형을 사용할 수 있어야 합니다.
예를 들어 직사각형을 나타내는 클래스가 있다고 가정해 보겠습니다. 사각형을 나타내는 하위 클래스를 만들고 싶을 수 있습니다. 그러나 사각형 클래스가 사각형 클래스를 대신하여 사용할 수 있는 방식으로 설계되지 않은 경우 Liskov 대체 원칙을 위반합니다.
이를 설계하는 더 좋은 방법은 직사각형 클래스의 너비와 높이를 불변으로 만드는 것입니다. 즉, 높이를 변경하지 않고 너비를 변경할 수 없으며 그 반대도 마찬가지입니다. 이렇게 하면 코드를 손상시키지 않고 사각형 클래스 대신 사각형 클래스를 사용할 수 있습니다.
인터페이스 분리 원칙에 따르면 클라이언트는 사용하지 않는 인터페이스를 강제로 구현해서는 안 됩니다. 즉, 너무 많은 메서드로 인터페이스를 만들면 안 됩니다.
예를 들어 주문 처리 방법을 정의하는 인터페이스가 있다고 가정해 보겠습니다. 고객 주문만 처리하는 하위 클래스를 만들고 싶을 수 있습니다. 그러나 인터페이스가 고객 및 공급업체 주문을 모두 처리하기 위한 메서드를 정의하는 경우 서브클래스는 사용하지 않는 메서드를 구현해야 합니다. 이는 인터페이스 분리 원칙을 위반합니다.
이를 설계하는 더 좋은 방법은 두 개의 별도 인터페이스를 만드는 것입니다. 하나는 고객 주문 처리용이고 다른 하나는 공급업체 주문 처리용입니다. 이런 식으로 하위 클래스는 다른 인터페이스를 강제로 구현하지 않고도 필요한 인터페이스를 구현할 수 있습니다.
종속성 역전 원칙에 따르면 클래스는 구체적인 클래스가 아니라 추상화에 의존해야 합니다. 즉, 특정 클래스에 대한 종속성이 아니라 인터페이스 또는 추상 클래스에 대한 종속성을 만들어야 합니다.
예를 들어 구체적인 데이터베이스 클래스에 의존하는 클래스가 있다고 가정해 보겠습니다. 데이터베이스를 변경해야 하는 경우 클래스의 코드도 변경해야 합니다. 이는 종속성 역전 원칙을 위반합니다.
이를 설계하는 더 좋은 방법은 추상 데이터베이스 클래스에 대한 종속성을 만드는 것입니다. 그런 다음 데이터베이스를 확장하는 구체적인 MysqlDatabase 클래스를 만들 수 있습니다. 이렇게 하면 클래스의 코드를 변경하지 않고도 데이터베이스를 변경할 수 있습니다.
이 기사에서는 SOLID 원칙이 Spring Boot 개발에 어떻게 적용될 수 있는지 살펴보았습니다. 이러한 원칙은 코드를 유지 관리 및 확장 가능하게 만들어 더 나은 코드를 작성하는 데 도움이 될 수 있습니다.