seong_hye, the developer

Swift) 문법 정리 - 클래스(Class) vs 구조체(Struct) 본문

IOS

Swift) 문법 정리 - 클래스(Class) vs 구조체(Struct)

seong_hye 2022. 7. 12.

 

 

대부분의 언어에서 말하길

클래스는 프로그래밍의 패러다임이라고 말한다.

 

패러다임

어떤 한 시대 사람들의 견해나 사고를 지배하고 있는 이론적 틀이나 개념의 집합체

 

클래스를 도입하면서 객체 지향 프로그래밍이 시작되었다.


그렇다면 객체가 무엇일까?

객체 (인스턴스)

소프트웨어 애플리케이션을 구축하는 블록

쉽게 사용하고 재사용할 수 있는 독립적인 기능 모듈

속성(프로퍼티) + 함수(메서드)로 이루어짐

 

객체 지향 프로그래밍

쉽게 생각하면 객체를 만들어내는 프로그래밍

의미있는 데이터를 묶음으로 만들려는 것

클래스와 구조체가 존재함


클래스(Class)

상속 가능

클래스의 객체는 메모리 구조의 힙 영역에 저장됨

값 복사시 참조타입(Reference Type)으로 메모리 주소를 가리킴

메모리 관리는 ARC 사용 

class Student {
	var name = "학생"
	var grade = 2
    var class = 11
    
    func study() {
    	print("공부하다")
    }
    
    func sleep() {
    	print("자다")
    }
}

var seonghye = Student()
seonghye.study()

 

구조체(Struct)

상속 불가능

구조체 인스턴스는 메모리 구조의 스택 영역을 사용

 값 복사 시 값 타입(Value Type)으로 값 자체를 복사 

Swift 표준 라이브러리의 기본 타입은 모두 구조체 사용

struct Student {
	var name = "학생"
	var grade = 2
    var class = 11
    
    func study() {
    	print("공부하다")
    }
    
    func sleep() {
    	print("자다")
    }
}

var seonghye = Student()
seonghye.study()

클래스와 구조체의 공통점은?

 

- 값을 저장할 프로퍼티 선언 가능, 메서드 선언 가능

- 내부 프로퍼티에 점 접근자(.)를 사용하여 접근 가능

- 생성자(init)를 사용해 초기 상태를 설정 가능

- extension을 사용하여 기능 확장 가능

- Protocol을 채택하여 기능 설정 가능

 

 

클래스와 구조체의 차이점은?


가장 큰 차이점은 구조체는 값 타입, 클래스는 참조 타입이라는 

- 구조체는 상속 불가능, 클래스는 상속 가능

- 타입캐스팅은 클래스의 객체에만 허용

- deinit은 클래스의 객체에서만 호출된다.

- 구조체는 멤버와이즈 이니셜라이저 제공, 클래스는 편의 생성자 존재

 

 

어떤 상황에서 클래스를 쓰고, 구조체를 쓸까 ?

 

구조체 사용

- 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 경우

- 캡슐화한 값을 참조하는 것보다 복사해서 사용하는 것이 효율적할때

- 구조체에 저장 속성들이 값 타입이며, 참조하는 것보다 복사하는것이 합당할때

 

클래스 사용

- 데이터에서 상속의 구조가 필요할 때

- 해당 모델을 직렬화해서 전송하거나 파이로 저장할 경우가 발생할 때

(참조 - 애플 문서)


참고자료)

https://zrr.kr/qNHN

 

앨런 Swift문법 마스터 스쿨 (온라인 BootCamp - 2개월과정) 강의 - 인프런

Swift문법을 제대로 이해, 활용해보고자 하는 철학을 바탕으로 과정이 설계되었습니다. 코딩에 대해 1도 모르는 비전공자를 시작으로 네카라쿠배에 입사할 수 있는 초고급 수준까지 올리는 것을

www.inflearn.com

 

Comments