class 와 struct의 차이점에 대해서 설명해주세요.
각 자의 인스턴스를 생성했을 때 클래스는 참조 타입으로서 원본 내용을 여러 곳에서 참조하고 구조체는 값 타입으로서 항상 복사본을 사용합니다.
클래스는 상속이 가능하며 구조체는 불가합니다.
클래스는 deinitializer를 가질 수 있지만 구조체는 불가합니다.
class func와 static func의 차이점에 대해서 설명해주세요.
class func는 하위 클래스에서 override가능하고 static은 불가합니다.
구조체에서는 static func만 사용할 수 있습니다.
call by reference 와 call by value에 대해서 설명해주세요.
call by reference는 함수에 인자를 전달할 떄 메모리 주소를 전달하며 원본 데이터가 수정될 수 있습니다. c.b.v는 복사본을 전달하며 원본 데이터는 변경되지 않습니다.
mutating 키워드에 대해서 설명해주세요.
구조체나 enum의 메서드에서 프로퍼티를 수정할 때 사용합니다.
객체지향 프로그래밍에 대해서 설명해주세요.
프로그램을 여러 개의 객체로 구성하여 설계하고 구현하는 프로그래밍 패러다임입니다.
데이터와 그 데이터를 처리하는 메서드를 하나의 객체로 묶습니다.
*객체는 클래스로부터 생성된 구체적인 인스턴스입니다. 클래스가 설계도라면, 객체는 그 설계도를 바탕으로 만들어진 실제 물체라고 할 수 있습니다.
객체지향 프로그래밍의 특징에 대해서 아는만큼 설명해주세요.
캡슐화, 상속, 다형성, 추상화
캡슐화는 객체의 데이터를 보호하기 위해 외부에서 접근을 제한하고, 데이터를 메서드를 통해서만 접근할 수 있도록 하는 개념입니다. Swift에서는 private, fileprivate, internal, public, open 등의 접근 제어자를 사용해 캡슐화를 구현할 수 있습니다.
상속은 기존 클래스를 바탕으로 새로운 클래스를 정의할 수 있는 개념입니다. 상위 클래스(부모 클래스)의 속성과 메서드를 하위 클래스(자식 클래스)가 물려받을 수 있습니다.
다형성은 여러 클래스가 동일한 메서드나 속성을 사용할 수 있게 해주는 개념입니다. 상속 관계에서 부모 클래스의 메서드를 자식 클래스가 재정의(오버라이딩)하여, 동일한 메서드 호출이지만 각 클래스에서 다르게 동작할 수 있습니다.
추상화는 복잡한 시스템을 단순하게 표현하기 위해, 필요하지 않은 세부 사항을 숨기고 중요한 개념만을 드러내는 과정입니다. 이를 통해 사용자는 객체의 내부 구현을 신경 쓰지 않고, 제공되는 인터페이스만으로 객체와 상호작용할 수 있습니다.
상속에 대해서 설명해주세요.
기존 클래스의 속성과 메서드를 새로운 클래스가 물려받는 것입니다.
코드의 재사용성을 높이고 계층적인 관계를 표현할 수 있습니다.
protocol에 대해서 설명해주세요.
특정 작업이나 기능에 필요한 메서드, 프로퍼티 등의 청사진을 정의합니다.
클래스, 구조체, 열거형에서 채택하여 구현할 수 있습니다.
Codable에 대해서 설명해주세요.
swift의 인코딩과 디코딩을 위한 프로토콜입니다.
JSON등의 외부 표현과 swift타입 간의 변환을 쉽게 만들어줍니다.
Dictionary를 사용해보셨나요?
네. 간단한 전화번호부 구현 연습을 할 때의 이름과 번호를 키-값으로 사용해보았고 API통신을 이용한 날씨정보 전달 연습을 할 때에도 사용자가 입력한 관심지역-날씨정보로 매칭하여 표시해줄 수 있었습니다.
Hashable에 대해서 설명해주세요.
swift의 프로토콜로서 타입의 인스턴스를 해시 값으로 표현할 수 있게 해줍니다.
Dictionary의 키나 Set의 요소로 사용될 수 있는 타입이 되기 위해 필요합니다.
Swift 접근제어자에 대해서 아는만큼 설명해주세요.
Swift Default 접근제어자는 무엇인지 설명해주세요.
기본 접근제어자는 internal입니다.