전 시간에서는 객체 지향의 기본 요소들에 대해 알아보았는데요.
이번 시간에는 객체 지향의 핵심 개념! 에 대해서 알아보도록 하겠습니다.
1. 캡슐화 (Encapsulation)
2. 상속 (Inheritance)
3. 다형성 (Polymorphism)
먼저 캡슐화에 대해서 알아보겠습니다.
캡슐화는 말 그대로 객체를 하나의 캡슐로 만들어서 내부에 있는 것들을 보호할 수 있게 하는 것이라고 보시면 되겠습니다. 즉 내부에 있는 것들에 직접적으로 접근할 때 일어날 수 있는 예외적인 사항들을 제거하기 위해 접근을 인위적으로 제어하는 것이라고 보시면 편하실 듯 합니다. 이를 위해 접근제한자들을 프로퍼티 앞에다가 지정해두는데, 이 부분은 다음 시간에 자세하게 알아보도록 하겠습니다.
두번째는 상속인데요.
상속은 제가 생각했을 때 객체지향 프로그래밍에서 가장 중요한 개념이라고 보여집니다. 상속은 말 그대로 부모가 자식에게 자신의 성질을 상속해주는 것이라고 보시면 될것 같습니다. 이전에 만들었던 Person 이라는 클래스를 가지고 예를 들어보도록 하겠습니다.
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func talk(_ message: String) {
print("\(name): \(message)")
}
}
class Korean: Person {
}
class Japanese: Person {
}
let chulsoo: Korean = Korean(name: "철수", age: 30)
let saito: Japanese = Japanese(name: "Saito", age: 30)
chulsoo.talk("안녕하세요!")
saito.talk("こんにちは")
위의 예제에서처럼, Korean 클래스와 Japanse 클래스는 Person 이라는 부모 클래스를 상속 받았기 때문에 별도의 생성자나 함수를 내부에서 선언하지 않아도 talk 메소드를 호출할 수가 있습니다.
마지막은 다형성 입니다.
다형성은 상속에서 이어지는 개념으로 생각하시면 될 것 같습니다. 부모 클래스에서 선언되었던 메서드들이 각 자식 클래스들에서 동일하게 사용되는 것이 아니라, 여러가지 다양한 형태로 사용될 수 있다는 것이죠. 바로 예시로 들어가겠습니다.
class Korean: Person {
override func talk(_ message: String) {
print("저는 한국인입니다.", message)
}
}
class Japanese: Person {
override func talk(_ message: String) {
print("저는 일본인입니다.", message)
}
}
이렇게 talk 메서드를 override 하여 동일한 형태의 메서드에서 다른 결과값을 반환할 수가 있게 됩니다. 그리고 부모 클래스에서 지원하는 행동을 그대로 사용하고 싶다면 super 를 사용하시면 됩니다.
class Korean: Person {
override func talk(_ message: String) {
super.talk(message)
print("저는 한국인입니다.")
}
}
이렇게 되면 super 로 부모 클래스 함수의 메서드를 호출하고, 그 이후 "저는 한국인입니다" 라는 추가적인 자식 클래스의 메서드까지 호출할 수가 있게 됩니다.
여기까지 간단하게 객체지향의 핵심 개념 3가지를 알아보았습니다.
다음에 또 만나요 제발~
'Swift 개발 이야기' 카테고리의 다른 글
iOS13 이상에서 스토리보드 없이 시작하기! (0) | 2020.04.03 |
---|---|
Insertion Sort Swift (0) | 2020.03.24 |
Swift 로 알아보는 객체지향 프로그래밍 - 1 (0) | 2020.02.07 |
API 를 여러개 호출해야할때 모든 API 가 호출되었음을 확인하려면? (0) | 2020.02.03 |
SwiftUI를 사용하지 않고 Preview 사용하기 (0) | 2020.01.03 |