[iOS / Swift] 객체 지향 프로그래밍

2025. 2. 3. 23:42·Swift/Swift 문법 정리

Swift에서 직접 타입을 만드는 방법

: 개발자가 필요한 타입을 직접 만들게 되는데 열거형(Enum), 구조체(Struct), 클래스(Class)로 만들 수 있음

 

Swift의 프로그래밍 패러다임

: Swift는 다양한 프로그래밍 패러다임을 지원하는 언어임

  • 객체지향 프로그래밍 `Object-Oriented Programming`(OOP)
  • 프로토콜 지향 프로그래밍 `Protocol-Oriented Programming`(POP)
  • 함수형 프로그래밍 `Functinal Programming`(FP)

애플이 제공하는 프레임 워크는 객체지향으로 구현되어 있음. iOS의 앱개발을 공부할 때는 보통 객체지향부터 시작하는게 일반적임.

 

그렇다면 객체 지향은 무엇임??


객체 지향 프로그래밍(OOP)이란?

객체 지향 프로그래밍이란 프로그램을 객체들의 상호작용으로 구성하는 프로그래밍 패러다임임. 여기서 "객체(Object)"란 데이터(속성)와 데이터를 조작하는 메서드(함수)를 하나의 단위로 묶은 것임. 쉽게 말하면, 세상의 모든 것을 객체로 본다고 할 수 있음.

 

예시(객체의 개념)

도로 위의 자동차, 그 자동차를 운전하는 운전자, 신호등, 횡단보도의 사람들 등 모든 것이 객체로 표현될 수 있음. 프로그래밍에서는 이러한 객체들의 상태와 동작을 정의하고 상호작용하도록 설계하는 게 핵심임.

 

객체 지향의 핵심 개념

 

2️⃣ 캡슐화(Encapsulation)

  • 데이터(속성)와 해당 데이터를 조작하는 메서드를 하나의 객체로 묶는 개념
  • 외부에서 직접 객체의 데이터를 변경하는 걸 제한하고, 메서드를 통해서만 접근할 수 있도록 함

 

Class Person {
	private var name: String
    
    init(name: String) {
    	self.name = name
    }
    
    func getName() -> String {
    	return name
    }
}

let p = Person(name: "Doseo")
	print(p.getName()) // "Doseo"

 

2️⃣ 상속(Inheritance)

  • 기존 클래스를 기반으로 새로운 클래스를 만들어 코드 재사용성을 높이는 개념
  • 부모 클래스의 기능을 자식 클래스가 물려받아 확장 가능함
class Animal {
    func speak() {
        print("동물이 소리를 냅니다.")
    }
}

class Dog: Animal {
    override func speak() {
        print("멍멍!")
    }
}
let dog = Dog()
dog.speak() // "멍멍!"

 

3️⃣ 다형성(Polymorphism)

  • 같은 메서드나 인터페이스를 여러 클래스에서 다르게 구현할 수 있음
  • 오버라이딩(Overriding): 상속받은 메서드를 자식 클래스에서 새롭게 구현
  • 오버로딩(Overloading): 같은 이름의 메서드를 매개변수의 형태를 다르게 하여 여러 개 정의 가능
class Cat: Animal {
    override func speak() {
        print("야옹!")
    }
}

let cat = Cat()
cat.speak() // "야옹!"

 

4️⃣ 추상화(Abstraction)

  • 객체의 핵심적인 속성과 기능만 노출하고 불필요한 부분은 숨기는 개념
  • Swift에서는 protocol을 활용하여 추상화 가능
protocol Vehicle {
    func startEngine()
}

class Car: Vehicle {
    func startEngine() {
        print("자동차 시동을 겁니다.")
    }
}
let car = Car()
car.startEngine() // "자동차 시동을 겁니다."

객체의 생성과 인스턴스

: 클래스는 객체를 만들 때 사용하는 설계도와 같으며, 클래스를 통해 만들어진 실체를 인스턴스(Instance)라고 함.

 

Swift에서 구조체와 클래스의 차이점

  • 구조체(Struct): 값 타입(Value Type) → 값이 복사됨
  • 클래스(Class): 참조 타입(Reference Type) → 메모리 주소를 참조함

구조체 예제

struct Person {
    var name: String
    var age: Int
    
    func speak() {
        print("Hello")
    }
}

let p = Person(name: "Doseo", age: 28)
p.speak() // "Hello"

 

클래스 예제

class Person2 {
    var name: String
    var age: Int
    
    func speak() {
        print("Hello")
    }
    
    init() {
        name = "Lee Doseo"
        age = 30
    }
}

let p2 = Person2()
p2.speak() // "Hello"

 


Swift에서 객체 간의 메시지 전달

: 객체 지향 프로그래밍에서는 객체들이 서로 메시지를 보내며 동작함. 객체 간의 상호작용을 통해 속성을 변경하거나 메서드를 호출하는 방식으로 기능을 수행함.

 

Cocoa에서의 메시지 패턴

애플이 제공하는 개발 환경인 Cocoa에서는 메시지를 보내는 객체를 Sender, 메시지를 받는 객체를 Receiver라고 함.


마무리

 

객체 지향 프로그래밍(OOP)은 iOS 개발을 처음 시작할 때 꼭 익혀야 하는 중요한 개념임. Swift는 객체 지향뿐만 아니라 프로토콜 지향 프로그래밍(POP)과 함수형 프로그래밍(FP)도 지원하므로, 이후 `RxSwift`나 `SwiftUI`를 공부할 때 이를 더욱 깊이 이해할 필요가 있음. 객체 지향 개념을 잘 활용하면 더 효율적이고 유지보수하기 쉬운 코드를 작성할 수 있음

 

아래는 Playground로 공부한 코드임.

 

Type_Object-Oriented.playground.zip
0.01MB

'Swift > Swift 문법 정리' 카테고리의 다른 글

[iOS / Swift] IUO(Implicitly Unwrapped Optional)정리  (0) 2025.01.15
[iOS / Swift] 함수 (Function) 정리  (0) 2025.01.07
[iOS / Swift] 열거형(Enum) 정리  (0) 2024.12.30
[iOS / Swift] 구조체와 클래스의 개념 정리  (0) 2024.12.23
[iOS / Swift] Optional 개념과 Unwrapping 정리  (0) 2024.12.19
'Swift/Swift 문법 정리' 카테고리의 다른 글
  • [iOS / Swift] IUO(Implicitly Unwrapped Optional)정리
  • [iOS / Swift] 함수 (Function) 정리
  • [iOS / Swift] 열거형(Enum) 정리
  • [iOS / Swift] 구조체와 클래스의 개념 정리
이도서
이도서
  • 이도서
    도서의 코딩노트
    이도서
  • 전체
    오늘
    어제
    • 분류 전체보기 (209)
      • Today I Learned (79)
        • 2024 (78)
      • Swift (25)
        • Swift 문법 정리 (19)
        • RxSwift (5)
      • Swift Study (12)
        • Playground (2)
        • Storyboard (9)
        • UIKit (1)
      • Git (3)
      • 코딩테스트 (60)
      • Dart 언어 (16)
      • Flutter (11)
        • Flutter Study (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 개발 공부 공유 링크
  • 인기 글

  • 태그

    코딩 테스트
    객체지향
    코딩테스트Level.1
    내일배움캠프
    구조체
    DART
    코딩테스트
    ios앱개발자
    함수
    iOS앱개발
    Xcode
    Swift
    Playground
    Til
    widget
    storyboard
    코딩테스트 level.1
    계산기만들기
    ios
    Flutter
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
이도서
[iOS / Swift] 객체 지향 프로그래밍
상단으로

티스토리툴바