일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 제어전송문
- class
- 주간 달력
- Switch
- SWIFT
- unrecognized selector sent to class
- 글또
- 회고
- struct
- weekly calendar
- 글또9기
- uikit
- actionSheet
- Git
- MyLife
- 연관값
- 내_삶
- On branch is up to date with ' '
- K디지털기초역량훈련
- 코드스니펫
- 다짐글
- IOS
- 파스칼표기법
- ios 개발 강의
- 생명주기
- AnyObject
- 바이트디그리
- copy-on-write
- avaliable
- error해결
- Today
- Total
seong_hye, the developer
Swift) 문법 정리 - 클래스(Class) vs 구조체(Struct) 본문
대부분의 언어에서 말하길
클래스는 프로그래밍의 패러다임이라고 말한다.
패러다임
어떤 한 시대 사람들의 견해나 사고를 지배하고 있는 이론적 틀이나 개념의 집합체
클래스를 도입하면서 객체 지향 프로그래밍이 시작되었다.
그렇다면 객체가 무엇일까?
객체 (인스턴스)
소프트웨어 애플리케이션을 구축하는 블록
쉽게 사용하고 재사용할 수 있는 독립적인 기능 모듈
속성(프로퍼티) + 함수(메서드)로 이루어짐
객체 지향 프로그래밍
쉽게 생각하면 객체를 만들어내는 프로그래밍
의미있는 데이터를 묶음으로 만들려는 것
클래스와 구조체가 존재함
클래스(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은 클래스의 객체에서만 호출된다.
- 구조체는 멤버와이즈 이니셜라이저 제공, 클래스는 편의 생성자 존재
어떤 상황에서 클래스를 쓰고, 구조체를 쓸까 ?
구조체 사용
- 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 경우
- 캡슐화한 값을 참조하는 것보다 복사해서 사용하는 것이 효율적할때
- 구조체에 저장 속성들이 값 타입이며, 참조하는 것보다 복사하는것이 합당할때
클래스 사용
- 데이터에서 상속의 구조가 필요할 때
- 해당 모델을 직렬화해서 전송하거나 파이로 저장할 경우가 발생할 때
(참조 - 애플 문서)
참고자료)
'IOS' 카테고리의 다른 글
Swift) 문법 정리 - 속성(Property) & 함수(Method) (0) | 2022.07.12 |
---|---|
Swift) 문법 정리 - 연산자 (0) | 2022.07.12 |
Swift) 문법 정리 - 옵셔널(Optional) / 옵셔널 바인딩 (0) | 2022.07.12 |
Swift) 문법 정리 - 반복문 (0) | 2022.07.12 |
Swift) 문법 정리 - 조건문 (0) | 2022.07.12 |