← 메인으로

0730-3 객체지향

스위프트는 객체지향 어플리케이션 개발을 광범위하게 지원한다. 하지만, 객체지향 프로그램이라는 주제는 너무 커서 그 내용만으로 책 한 권을 쓸 수도 있을 정도다. 그 대신 우리는 객체지향 프로그래밍에 포함된 기본 개념을 살펴본 후에 스위프트 앱 개발과 관련된 개념을 공부할 것이다.

객체란 무엇인가?

객체(Class instance)는 소프트웨어 어플리케이션을 구축하는 블록으로 쉽게 사용하고 재사용할 수 있는 독립적인 기능 모듈이다.

클래스란 무엇인가?

빌딩이 건축되면 어떤 모양일지를 정의하는 청사진이나 건축가의 도면처럼 클래스는 객체가 생성될 때의 모습을 정의한다. 예를 들어, 메서드들이 하게 될 일이 무엇이며 어떤 프로퍼티들이 존재할 지 등을 정의한다.

스위프트 클래스 선언하기

객체를 인스턴스화하기 전에 먼저 객체에 대한 '청사진'인 클래스를 정의해야 한다. 새로운 스위프트 클래스를 선언할 때 새롭게 만드는 클래스가 어떤 부모 클래스 에서 파생되었는지를 지정하고 클래스에 포함할 프로퍼티와 메서드를 정의한다. 새로운 클래스에 대한 기본 구문은 다음과 같다.

class 새로운 클래스 이름: 부모 클래스 { // 프로퍼티 // 인스턴스 메서드 // 타입 메서드 } 

선언부의 프로퍼티 부분은 이 클래스 내에 포함될 변수와 상수를 정의하며, 스위프트에서 변수나 상수를 선언할 때와 동일한 방법으로 선언된다. 은행계좌에 대한 클래스를 생성하며 기본 개념을 공부해보자.

class BankAccount { } 

클래스에 인스턴스 프로퍼티 추가하기

객체지향 프로그래밍의 핵심 목적은 데이터 캡슐화라는 개념이다. 데이터 캡슐화의 기본 개념은 클래스에 저장되고 접근될 수 있는 데이터는 오직 해당 클래스 내에 정의된 메서드만을 통해서 된다는 것이다.

클래스 내의 캡슐화된 데이터를 프로퍼티 또는 인스턴스 변수라고 한다.

BankAccount 클래스의 인스턴스는 은행 계좌 번호와 계좌에 남은 잔고 데이터를 저장하게 될 것이다. 프로퍼티는 스위프트에서 변수나 상수를 선언할 때와 동일한 방법으로 선언되므로 다음과 같이 변수들을 추가할 수 있다.

class BankAccount { var accountBalance: Float = 0 var accountNumber: Int = 0 } 

메서드 정의하기

본질적으로 클래스의 메서드는 클래스의 성격에 맞는 특정 작업을 수행하기 위해 호출되는 코드 루틴이다.

잘 하다가 갑자기 또 앞이 깜깜해진다.ㅋㅋㅋㅋㅋㅋㅋㅋㅋ GPT 호출!


용어쉽게 말하면비유
클래스설계도건축 도면
인스턴스클래스로 만든 실체지어진 실제 건물
객체= 인스턴스 (같은 말)
class BankAccount { var accountBalance: Float = 0 var accountNumber: Int = 0 } // 인스턴스 생성(객체 생성) let myAccount = BankAccount 

데이터 캡슐화란?

클래스 안에 데이터(=프로퍼티)를 넣고 그 데이터는 클래스 내부에서만 다룰 수 있게 막는 것!

class BankAccount { var accountBalance: Float = 0 func deposit(amount: Float) { accountBalance += amount } func withdraw(amount: Float) { accountBalance -= amount } 

타입 메서드 VS 인스턴스 메서드

메서드 종류선언 방식언제 사용함?
인스턴스 메서드func객체 하나하나에 대해 동작
타입 메서드static func 또는 class func전체 클래스 단위에서 동작
class BankAccount { static var bankName = "Swift Bank" // 타입 프로퍼티 var accountBalance: Float = 0 func deposit(amount: Float) { accountBalance += amount } static func printBankName() { print(bankName) } } 
let acc = BankAccount() acc.deposit(amount: 100) // 인스턴스 메서드 BankAccount.printBankName() // 타입 메서드 

정리


메서드 정의하기(재도전)

[[0730 개발 공부하다가...]]


도대체 객체지향이 뭘까?

객체지향(Object-Oriented-Programming)은 간단히 말하면, 현실 세계의 사물을 프로그래밍에 반영하는 방식이다.

쉽게 말해 객체지향은 데이터(속성)와 그 데이터를 다루는 기능(메서드)을 하나의 객체로 묶어서 프로그램을 구성하는 방식. 예를 들어, 자동차를 프로그래밍으로 표현한다고 하면!

class Car { var color: String var speed: Int func drive() { print("주행 중!") } func brake() { print("브레이크 작동!") } } 

왜 객체지향을 쓰는 걸까?

  1. 현실 세계와 유사한 사고방식
    • 사람, 고양이, 커피머신 등등을 객체로 모델링할 수 있다.
  2. 코드 재사용성(재활용 가능)
    • class나 struct로 만든 객체는 계속 재사용이 가능하다.
  3. 유지보수가 가능
    • 기능별로 객체를 분리해 관리하기에 고치기 쉽다.
  4. 협업에 좋음
    • 역할별로 클래스를 나눠 각자 작업이 가능하다.

객체지향의 4대 특징


메서드 정의하기

본질적으로 클래스의 메서드는 클래스의 성격에 맞는 특정 작업을 수행하기 위해 호출되는 코드 루틴이다.

메서드는 타입 메서드와 인스턴스 메서드의 서로 다른 두 가지 형태로 나뉜다.