본문 바로가기

Swift

객체 지향 프로그래밍

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