Skip to main content

One post tagged with "Open Closed Principle"

View All Tags

· 2 min read

OCP(Open Closed Principle)

  1. OCP(Open Closed Principle) - 개방, 폐쇄 원칙
  • 확장에는 열려있으나 변경에는 닫혀있어야 한다는 원칙

  • 어떤 기능을 추가할 때, 기존의 코드는 만지지 않고 새로 동작하는 기능에 대해서만 코드가 작성 되어야한다

  • protocol을 활용하면 된다

  • 예제 코드

// OCP BadCase
class StudentBad {
func printName() {
print("Student")
}
}

class TeacherBad {
func printName() {
print("Teacher")
}
}

class ClassRoomBad {
private var students: [StudentBad] = [StudentBad(), StudentBad(), StudentBad()]
private var teachers: [TeacherBad] = [TeacherBad(), TeacherBad(), TeacherBad()]

func printAllName() {
students.forEach {
$0.printName()
}

teachers.forEach {
$0.printName()
}
}
}
  • 새로운 직업 이 추가될 경우 새로운 직업에 대한 class를 정의하고 ClassRoom의 코드에도 수정이 필요하기 때문에 OCP 원칙에 어긋나게 된다
// OCP NiceCase
protocol Person {
func printName()
}

class StudentNice: Person {
func printName() {
print("Student")
}
}

class TeacherNice: Person {
func printName() {
print("Teacher")
}
}

class ClassRoomNice {
private var persons: [Person] = [ StudentNice(), TeacherNice(), StudentNice(), TeacherNice()]

func printAllNames() {
persons.forEach {
$0.printName()
}
}
}
  • protocol을 사용하여 공통 타입를 만들어 Person으로 접근하면 새로운 직업이 추가 되어도 해당 직업의 대한 class만 구현해주면 된다

    참조

  • https://dongminyoon.tistory.com/49