Written by
Amy
on
on
객체 지향 프로그래밍
객체 지향 프로그래밍은 컴퓨터 프로그램을 여러 개의 독립된 단위, 즉 “객체”들의 모임으로 파악하고자 하는 것이다.
01. Class
- 같은 종류의 집단에 속하는 속성(attribute = variable)과 행위(behavior = function)를 정의한 것
02. Instance
- Class의 실체화된 인스턴스(객체)는 자신만의 고유한 속성(변수, 함수)을 가질 수 있으며, 클래스에서 정한 행위(함수, 메소드)를 수행할 수 있다.
- 클래스를 실체화(Instance) 하면 객체(Object)를 만들수 있다.
- Swift에서 객체는 보통 Instance로 표현한다.
01. Subject 클래스 생성
Class Subject {
var name: String = ""
var score: Int = 0
}
02. instance 생성
var newSubject: Subject = Subject()
// Subject() == Subject.init(){} == 초기화 method
03. Method
- 클래스로부터 생성된 객체를 사용하는 방법으로서 객체에 명령을 내리는 메시지라 할 수 있다.
- Method는 Class내에 선언된 함수를 말하며, 이는 객체에 의해 발현된다.
var s1 = Student(name: "Amy", id: 2011111050)
s1.setSubjects(subjects: [math, english, computer])
04. 객체의 속성
추상화(Abstraciton)
- 클래스를 정의하는 것 : 공통의 속성이나 기능을 묶어 이름을 붙이는 것
class Subject {
var name: String
var score: Int = 0
var grade: String = "F"
var gradePoint: Double = 0.0
var credit: Int = 1
init(name: String) {
self.name = name
} // instance를 생성할 때, 무조건 name이 초기화 됨
func setScore(score: Int) {
self.score = score
} // method 함수 구현
}
캡슐화(Encapsulation)
- class안에 관련된 변수와 메소드를 묶어 넣는 것
- 코드의 수정 없는 재활용을 위한 작업
은닉화
- 메소드의 로직이나 멤버 변수들에 대해 외부로 보이지 않게 하는 것
- 접근지정자: 클래스의 멤버에 접근할 수 있는 권한을 통제 (ex. private, public)
- 데이터에 대한 읽기 or 쓰기 권한 구분 가능
- 입력데이터의 유효성 검증 부분을 로직에 포함 시킬 수 있음 (ex. 음수는 입력 안되게끔 처리)
class Subject {
private var name: String
private var score: Int = 0
// 외부에서 score에 setscore로 값을 할당은 할 수 있으나, 값을 직접 읽을 수는 없음
func setScore(score: Int) {
self.score = score
} // method 함수 구현
init(name: String) {
self.name = name
} // instance를 생성할 때, 무조건 name이 초기화 되고, 추후에 바꿀 수도 없음
}
상속성(Inheritance)
- 상위 개념의 특징을 하위 개념이 물려받는 것
- 부모 클래스(super, parent)와 자식 클래스(sub, child)
- 자식 클래스가 부모 클래스의 속성을 이용할 수 있게 하는 기능
- [참고] Class는 상속하는 것이고, Struct에서 Protocol은 선택하는 것
class ViewController: UIViewController { }
다형성(Polymorphism)
- 기존에 구현되어있는 클래스를 확장, 변형
- 재정의(Override) : 부모 클래스에게서 물려받은 성질을 그대로 사용하지 않고 자식 클래스에게 맞는 형태 또는 행위로 변경하여 사용할 수 있는 기능
- 상속을 받은 클래스에 한해서 부모 클래스의 속성(메소드)을 재정의 가능하다.
class ViewController: UIViewController {
override func viewDidLoad() {
// func viewdDidLoad는 원래 부모의 것(UIViewController)이나, 이를 재정의하겠다는 의미
super.viewDidLoad()
// 부모(super)의 method(viewDidLoad)를 먼저 호출해주고 아래에 viewDidLoad() 재정의 코드 작성
}