일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 안드로이드 스튜디오 반복되는 레이아웃 코드
- 리사이클러뷰 아이템 재사용
- AAC
- recyclerview item recycle
- 이중for문 사용 안하기
- 안드로이드 디자인패턴
- 디자인 패턴 예제
- 객체지향 프로그래밍 5가지 원칙
- dagger error
- savedinstancestate
- Kotlin
- 안드로이드 스튜디오 커스텀 다이얼로그
- 안드로이드 스튜디오 custom dialog
- 변수
- hilt error
- apache nginx
- java
- edittext 연결
- 안드로이드 스튜디오 인터넷 연결 안되어 있을 때
- apache란
- 아파치 엔진엑스
- 아파치란
- 안드로이드 스튜디오 인터넷 연결 확인
- LifeCycle
- 다른 객체 리스트의 비교
- Thread
- 안드로이드 스튜디오 tts
- 안드로이드 스튜디오 style
- java thread 예제
- 자바 스레드 예제
- Today
- Total
Sam Story
JAVA - 개방 폐쇄 원칙 본문
지난번 포스팅에 이어 오늘은 개방 폐쇄 원칙에 대해 포스팅 하겠다.
객체지향 프로그래밍의 5가지 원칙 SOLID 원칙에 대한 내용은 아래 포스팅 참고
https://samtistory.tistory.com/49
객체지향 프로그래밍 SOLID 원칙
지난번 포스팅 했던 객체지향 프로그래밍에 이어서객체지향 프로그래밍의 5가지 원칙 SOLID 원칙에 대해 포스팅 하려한다. SOLID 원칙 이란? SOLID란 객체 지향 프로그래밍을 하면서 지켜야하
samtistory.tistory.com
개방-폐쇄 원칙 (OCP)
개방-폐쇄 원칙은 클래스는 확장에 열려있어야 하며, 수정에는 닫혀있어야 한다를 뜻한다.
기능 추가 요청이 오면 클래스를 확장을 통해 쉽게 구현하면서,
확장에 따른 클래스 수정은 최소화 하도록 프로그램을 작성해야 하는 설계 기법이다.
- 확장에 열려있다
새로운 변경 사항이 발생했을 때 유연하게 코드를 추가함으로써
애플리케이션의 기능을 큰 힘을 들이지 않고 확장할 수 있다.
- 변경에 닫혀있다
새로운 변경 사항이 발생했을 때 객체를 직접적으로 수정해야 한다면
새로운 변경사항에 대해 유연하게 대응할 수 없는 애플리케이션이라고 말한다.
이는 유지보수의 비용 증가로 이어지는 매우 안좋은 예시이다.
그림으로 간단하게 알아보자면
위 그림을 보면 알다시피
개방 폐쇄의 원칙은 추상화를 이용하여 간단히 나타낼 수 있다.
코드를 보며 잘못된 예시와 그를 수정한 예시를 보도록 하자.
Exercise class & PlayExercise class
public class Exercise {
String exerciseName;
// 생성자
public Exercise(String exerciseName) {
this.exerciseName = exerciseName;
}
}
public class PlayExercise {
// 기능 자체에는 문제가 없다.
// 운동이 점점 늘어나게 될 수록 분기점이 계속 늘어나게 되고 계속 수정해줘야함.
void play(Exercise exercise) {
if(exercise.exerciseName.equals("스쿼트")) {
System.out.println("스쿼트를 합니다.");
} else if(exercise.exerciseName.equals("푸시업")) {
System.out.println("푸시업을 합니다.");
} else if(exercise.exerciseName.equals("런지")) {
System.out.println("런지를 합니다.");
}
}
}
Main class
public class Main {
public static void main(String[] args) {
Exercise squat = new Exercise("스쿼트");
Exercise pushUp = new Exercise("푸시업");
Exercise lunge = new Exercise("런지");
PlayExercise playExercise = new PlayExercise();
playExercise.play(squat);
playExercise.play(pushUp);
playExercise.play(lunge);
}
}
이렇게 코드를 짜고 실행하면 정상적으로 작동하는 결과를 볼 수 있다.
하지만 이렇게 작성할 경우 playExercise class 에서 작성한 주석대로
운동의 종류가 늘어나게 되면 playExercise class 에 play 메서드 분기점을 늘려줘야 되면서
수정을 해야하고, 코드 가독성 또한 상당히 떨어지게 된다.
이렇게 작성한 코드는 처음 설계가 잘못되었다는걸 보여주는 예시이다.
그렇다면 어떤식으로 작성해야 개방 폐쇄 원칙을 지킨것 일까
같은 내용에 새로운 class로 아래 새로운 예시를 보도록 하자.
Exercise2 class
public abstract class Exercise2 { // 추상클래스로 구현
// 추상 메서드
public abstract void play();
}
Squat class , PushUp class , Lunge class
public class Squat extends Exercise2{
@Override
public void play() {
System.out.println("스쿼트를 합니다.");
}
}
public class PushUp extends Exercise2{
@Override
public void play() {
System.out.println("푸시업을 합니다.");
}
}
public class Lunge extends Exercise2{
@Override
public void play() {
System.out.println("런지를 합니다.");
}
}
각각 새로운 운동명들로 클래스를 만들고 Exercise2 class를 상속받아
play 메서드를 override 해준다.
Main2 class
public class Main2 {
public static void main(String[] args) {
Exercise2 squat = new Squat();
Exercise2 pushUp = new PushUp();
Exercise2 lunge = new Lunge();
squat.play();
pushUp.play();
lunge.play();
}
}
실행결과
위에 코드처럼 수정하게 되면 각 운동별로 운동 내용이 수정되기도 굉장히 간단하며
운동 종류가 늘어날 경우 새로운 class를 만들어서 늘려주면 되기 때문에
개방 - 폐쇄 원칙을 지키며 작성한 코드라고 할 수 있다.
프로젝트를 진행하기 전 설계하는 부분에 있어서 이러한 원칙을 준수해야
나중을 위해서라도 훨씬 유리하다는걸 알게되는 내용이다.
'JAVA' 카테고리의 다른 글
JAVA - 인터페이스 분리 원칙 (1) | 2024.10.16 |
---|---|
JAVA - 리스코프 치환 원칙 (0) | 2024.10.15 |
JAVA - 단일 책임의 원칙 (1) | 2024.10.12 |
JAVA - 2~36진수 기수변환 (0) | 2024.09.29 |
JAVA - 자료구조 Map (4) | 2024.09.21 |