Object-Oriented Programming
프로그램 설계 방법론의 하나
1. 객체 지향 프로그래밍 이전의 프로그래밍 패러다임
1-1. Procedural Programming절차적 프로그래밍
OOP 이전의 프로그래밍 패러다임으로, 입력받은 명령을 명시된 순서대로 처리한 다음, 그 결과를 내는 초기 프로그래밍 방식
이는 프로그램 자체의 기능에 초점을 맞췄고, 취급하는 데이터에 대해서는 소홀했다.
조금만 복잡해져도 체계적으로 나타내는 것이 불가능할 정도로 꼬여서 코드를 읽고 유지보수하는 것이 곤란해진다.
1-2. Structured Programming구조적 프로그래밍
프로그램을 함수단위로 나누고 함수끼리 호출하는 방식
큰 문제를 작은 문제단위까지 나누어 해결하는 Top-Down 방식
데이터의 처리 방법은 구조화되었으나, 데이터 자체의 구조화를 하지 못했다는 한계가 있다.
이를 극복하기 위해 객체 지향 프로그래밍이 등장한다.
객체 지향 프로그래밍은 큰 문제를 작은 문제로 나누지 않고, 작은 문제들을 해결할 객체들을 만들고, 객체들을 조합하여 큰 문제들을 해결하는 Bottom-Up 방식이다.
2. 객체 지향 프로그래밍의 등장
2-1. Object객체
즉 '대상'
객체를 통하여 각 객체와 그 객체들간의 관계를 설정하는 것이 객체 지향 프로그래밍
객체 안에는 데이터(상태)와 메서드(행위)가 들어있다.
2-2. Class
즉 객체의 '틀'
객체는 클래스를 통해 실체화된다.
class Dog {
var name: String?
var color: String?
var eyeColor: String?
var height: Int?
var length: Int?
var weight: Int?
func sit() { print("\(name!)이(가) 앉았습니다." }
func layDown() { print("\(name!)이(가) 누웠습니다." }
func shake() { print("\(name!)이(가) 꼬리를 흔들었습니다.") }
func come() { print( "\(name!)이(가) 다가왔습니다." }
}
// 강아지의 틀.
이와 같이 강아지의 틀인 Dog클래스를 구현해 두면 간단한 선언을 통해 강아지를 찍어낼 수 있게 된다.
let yuki: Dog = Dog()
yuki.name = "유키"
yuki.color = "White"
yuki.eyeColor = "Black"
yuki.height = 30
yuki.length = 70
yuki.weight = 3
// 틀에서 찍어낸 유키.
털이 하얗고 눈은 까만 유키를 찍어냈다.
print(yuki.eyeColor!) // Black
yuki.sit() // 유키이(가) 앉았습니다.
yuki.come() // 유키이(가) 다가왔습니다.
방금 막 찍어낸 메카-유키는 오라고 하면 바로 온다. 현실의 유키는 앉기는 해도 오는 건 자기가 오고 싶을 때 온다. 클래스를 통해 이렇게 효율적으로 원하는 객체를 구현할 수 있다.
3. OOP의 특징
3-1. 추상화
사물의 공통점만 취하고 차이점을 버리는 일반화를 통한 단순화
대상의 불필요한 부분을 무시하며 복잡성을 줄이고 목적에 집중할 수 있도록 한다.
3-2. 캡슐화
객체의 상태를 나타내는 속성 정보를 private하게 관리하는 것
직접적으로 속성 정보를 변경하는 대신, 요청을 보내 그 응답에 의해 객체의 상태를 변경하게 된다.
3-3. 상속성
부모 클래스를 자식 클래스가 물려받아 속성과 기능을 동일하게 사용하는 것. 상속과 extension을 통해 이를 구현하게 된다.
3-4. 다형성
동일한 요청에 대해 각각 다른 방식으로 응답할 수 있게 한다. 오버라이딩, 오버로딩이 이를 위한 구현이다.
'Swift' 카테고리의 다른 글
Optional (0) | 2023.04.28 |
---|---|
Type Casting (0) | 2023.04.27 |
개인정보 처리방침 (0) | 2023.04.14 |
QuitHelper: 심플한 금연 어플 (0) | 2023.04.14 |