가독성 높이기
intent 줄여 코드 가독성 높이기
💡 if - else 조건문을 많이 사용하면 코드라인이 길어지고, Indent가 많아져서 가독성이 떨어진다. Guard clausing, Polymorhism(다형성)을 사용하면 코드를 깔끔하게 짤 수 있다.
Guard clause
일반적으로 if else 문이 중첩될수록 (nested) 코드가 복잡해진다.
nested 코드를 줄이고 가독성을 높이기 위해 Fail 로직을 코드 상단에 배치한다.
// as-is
func sayHi(to developer: Developer) throws {
if developer.isFrontEnd {
throw NSError(domain: "myDomain", code: 1, userInfo: [NSLocalizedDescriptionKey: "프론트 엔지니어입니다"])
} else if developer.isBackEnd {
if !developer.useJava {
throw NSError(domain: "myDomain", code: 2, userInfo: [NSLocalizedDescriptionKey: "자바를 사용하지 않습니다"])
} else {
if developer.useSpring {
print("안녕하세요!")
} else {
throw NSError(domain: "myDomain", code: 3, userInfo: [NSLocalizedDescriptionKey: "자바의 다른 프레임워크를 사용합니다"])
}
}
} else {
throw NSError(domain: "myDomain", code: 4, userInfo: [NSLocalizedDescriptionKey: "who are you?"])
}
}
// to-be
func sayHi(to developer: Developer) throws {
guard developer.isBackEnd else {
throw NSError(domain: "myDomain", code: 1, userInfo: [NSLocalizedDescriptionKey: "백엔드 엔지니어가 아닙니다"])
}
guard developer.useJava else {
throw NSError(domain: "myDomain", code: 2, userInfo: [NSLocalizedDescriptionKey: "자바를 사용하지 않습니다"])
}
guard developer.useSpring else {
throw NSError(domain: "myDomain", code: 3, userInfo: [NSLocalizedDescriptionKey: "스프링을 사용하지 않습니다"])
}
print("안녕하세요!")
}
Polymorphism(다형성)
// as-is
class Developer {
func coding() {
print("코딩을 합니다")
}
}
class Designer {
func design() {
print("디자인을 합니다")
}
}
class Analyst {
func analyze() {
print("분석을 합니다")
}
}
class Company {
var employees: [Any]
init(employees: [Any]) {
self.employees = employees
}
func makeWork() {
for employee in employees {
if let developer = employee as? Developer {
developer.coding()
} else if let designer = employee as? Designer {
designer.design()
} else if let analyst = employee as? Analyst {
analyst.analyze()
}
}
}
}
// to-be
protocol Employee {
func work()
}
class Developer: Employee {
func work() {
print("코딩을 합니다")
}
}
class Designer: Employee {
func work() {
print("디자인을 합니다")
}
}
class Analyst: Employee {
func work() {
print("분석을 합니다")
}
}
class Company {
var employees: [Employee]
init(employees: [Employee]) {
self.employees = employees
}
func makeWork() {
for employee in employees {
employee.work()
}
}
}
Last updated