티스토리 뷰
Swift & Struct와 관련된 면접 질문
- Struct와 Class의 차이에 대해 설명하고 언제 각각을 쓰면 좋을지 설명해보세요
- Struct가 무엇이고 어떻게 사용하는지 설명하시오
struct와 class의 비교는 많은 interview referene에서 찾아볼 수 있기 때문에 더 잘 알아야 한다는
강박이 생기는 것 같습니다.
오늘은 꼬리에 꼬리를 물 수 있는 Struct와 Class에 대해 다뤄보겠습니다.
Struct & Class
Struct | Class | |
정의 | 타입이 다른 데이터를 하나로 묶는 자료구조 | 특정 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀 |
타입 | 값 타입 (value type) | 참조 타입 (reference type) |
메모리 공간 | stack | heap |
공통점 | 내부에 property, function, subscript, initializer를 둘 수 있음 | |
extension 키워드를 통해 확장 가능 | ||
protocol을 따를 수 있음 | ||
generic 사용 가능함 | ||
차이점 | ||
복사 방식 | 함수에 인자로 전달 / 변.상수에 배정(assigned) / 초기화 될 때 내용이 복사가 일어남 A → B A → C |
함수에 인자로 전달 / 변.상수에 배정(assigned) / 초기화 될 때 기존의 data를 공유 A ← B ↖ C |
let 사용 | 생성한 객체 자체가 상수가 되어 내부 property 변경 불가 error: "Cannot assign property: ____ is a 'let' constant" |
- 내부 property 변경 가능 - reassign 불가 ( let myClass = A() let yourClass = A() myClass = yourClass 안됨 ) |
var 사용 | 내부 property들을 mutating function을 통해 변경 가능 | - 내부 property 변경 가능 - reassign 가능 |
다중스레드 환경 |
memory issue 들을 제거하는데 도움이 됨 ↣ deadlock ↣ race condition (class처럼 하나의 자료를 모두 참조하고 있는게 아니라 복사가 이루어진 것이니 각 스레드에서 처리 가능) |
- |
상속 | 불가능 | 가능 |
deinit | 불가능 (애초에 deinit은 ref type 용) | 가능 |
'iOS' 카테고리의 다른 글
[Rx] DisposeBag (0) | 2021.05.17 |
---|---|
[Rx] UITableViewCell 밀어서 삭제 (0) | 2021.05.13 |
[Rx] PHPhotoLibrary 첫 승인 이후 바로 앨범 안뜨는 문제 (0) | 2021.04.22 |
[iOS] 비동기+이미지+다운로드 = 💧 (0) | 2021.04.15 |
[iOS] UICollectionView로 무한히 도는 Carousel 만들기 (Infinite Carousel) (4) | 2021.03.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- firebase
- swacademy
- 삼성
- 컴공졸작
- RxSwift
- 부스트캠프2020
- 개발자인턴
- 알고리즘
- SWIFT
- 졸업작품
- 소프트웨어아카데미
- ios
- 부스트캠프
- 프로그래머스
- 인턴
- OS
- 컴퓨터공학
- 부캠
- 운영체제
- 삼성소프트웨어아카데미
- 코테
- TableView
- 소프트웨어역량시험
- 코딩테스트
- 컴과졸작
- 커넥트재단
- 데이터분석
- C++
- 보안
- nosql
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함