티스토리 뷰

728x90

1. Enum과 Struct의 차이점

Enum 타입은 열거형 타입으로 연관된 값들의 집합이다. case 하나하나가 하나의 값을 나타내는 타입.

Struct는 프로퍼티와 메서드로 구성된 타입.

enum, struct 모두 class와 다르게 값 타입이며, 상속이 불가능하지만 프로토콜 채택은 가능함.

 

2. Int / Int32 / Int64 | UInt / UInt32 / UInt64 각각의 차이는 무엇인지?

모두 정수를 나타내는 데이터 타입. 뒤에 붙는 32,64는 타입이 표현할 수 있는 비트의 크기. Int는 음수와 0, 양수를 표현할 수 있고, UInt는 양수만 표현할 수 있음. 크기가 표시되지 않은 Int, UInt는 해당 프로그램이 컴파일되는 컴퓨터의 시스템 아키텍처를 따른다. 즉, 자신이 사용하는 컴퓨터가 32비트 일 경우, Int의 범위는 -2^16 ~ 2^16 - 1 이고 64비트일 경우 -2^32 ~ 2^32 - 1 이다.

UInt의 범위가 필요하지 않는 한 Int 사용 권장. 두 타입을 모두 사용하면 서로 다른 타입의 값을 교환할때 자원소모 크기 때문.

 

3. Any 와 AnyObject는 어떤것인지?

Any는 함수타입을 포함하여 Swift의 모든 데이터 타입을 지칭하는 타입. Int, String 같은 기본 데이터 타입까지 포함. AnyObject는 모든 클래스 타입의 인스턴스를 나타내는 프로토콜. (범위 : Any > AnyObject). 모든 클래스가 암시적으로 준수하는 프로토콜.

 

4.  heap vs stack

둘다 코드에서 사용되는 데이터가 저장되는 메모리 영역으로

heap은 클래스 인스턴스, 클로저 참조 타입은 자동으로 이 영역에 저장된다. 이외의 데이터를 힙에 할당하려면 프로그래머가 할당, 해제 작업을 해줘야 한다.(동적할당)

단점 : 메모리 해제 작업이 제대로 이뤄지지 않으면 memory leak 발생. heap 경합으로 인한 속도저하 발생 가능.

장점 : 메모리 크기에 제한이 없음. 전역에서 사용할 수 있음. 데이터 크기가 정해지지 않은 변수 사용시 적합.

stack은 지역변수, 매개변수, 리턴값이 저장되는 메모리 영역.

단점 : 사용할 수 있는 메모리 크기에 제한이 있음. 지역변수만 엑세스 가능.

장점 : 메모리 할당, 해제 작업 필요 없이 자동 처리 됨.

 

5. refer vs value type

reference 타입은 값이 아니라 값이 존재하고 있는 메모리 주소를 갖고 있는 타입, value 타입은 값을 갖고 있는 타입.

둘의 차이는 타입이 전달될 때 reference 타입은 주소가 전달되고, value 타입은 값이 복사된다.

reference 타입은 heap영역에 데이터를 저장, value 타입은 stack 영역에 데이터가 저장된다.

 

6. retain cycle(순환 참조)

인스턴스가 두가지 이상일 때 인스턴스들이 서로의 인스턴스를 강한참조하는 경우 순환참조가 발생한다. 순환 참조가 발생하게 되면 인스턴스를 메모리에서 해제해도 서로에 대한 참조가 해제되지 않기 때문에 메모리릭이 발생하고 이는 weak, unowned을 사용하여 해결 가능하다.

 

7. 딕셔너리와 배열의 차이점

딕셔너리와 배열은 모두 컬렉션 타입.

배열은 순서가 있는 리스트 형태의 컬렉션 타입. 인덱스가 0부터 시작하는 사이즈 조절이 가능한 컬렉션 타입. 하나의 배열에 하나의 타입만 들어간다.

딕셔너리는 키와 값이 쌍으로 이루어져있는 컬렉션 타입. 키로 사용가능한 타입은 String, Int, Double, Bool뿐이다. 주로 json값을 받을때 사용. 딕셔너리는 배열과 다르게 딕셔너리 내부에 없는 키로 접근해도 오류가 발생하지 않고, nil 반환.

 

8. 옵셔널 추출 방식에 대해 설명

옵셔널 추출에는 옵셔널 바인딩과 강제 추출과 암시적 추출 옵셔널이 있다.

옵셔널 바인딩은 값을 안전하게 추출할 수 있는 방법으로 임시 변수를 사용해서 값이 있는지 없는지 검사하여 후 값을 사용 가능하다. if let 이나 guard let 사용.

강제 추출은 ! 키워드를 사용, 값이 없는 경우 런타임에러가 발생.

암시적 추출 옵셔널은 타입 뒤에 !를 붙여 사용. 일반값 처럼 사용할 수 있지만 nil일 경우 런타임 오류 발생

 

9. 스위프트의 기본 타입이 모두 구조체로 구현되어 있다고 했는데, 우리가 기본 타입(Int, String ...)을 이니셜라이저로 생성하지 않고 값으로 생성할 수 있는 이유는?

Swift의 기본 데이터 타입이 ExpressibleByLiteral 프로토콜을 준수하기 때문에 값의 타입대로 그 타입의 인스턴스를 생성할 수 있다. 즉, 코드에 쓰이는 그대로 인스턴스를 초기화하고 생성할 수 있음.

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함