파이썬 – 클래스를 사용하지 않기

보통 객체 지향 언어를 설명할 때, 객체 지향의 기본적인 개념으로 클래스를 언급하는 경우가 많습니다. 그리고 자바나 C++ 등의 언어에서도 어떤 현실의 문제를 해결할 때, 그에 맞는 클래스부터 설계하는 방식으로 접근하기도 하지요. 파이썬 역시 객체지향 컨셉이 주가 되는 언어이며, 당연하게도 사용자가 직접 원하는 클래스를 정의하여 사용할 수 있습니다. 실제로 파이썬의 모든 것이 객체이기도 하지요.

그럼에도 불구하고 몇몇 특수한 경우를 제외하면 사실 파이썬에서 클래스를 직접 만들어서 사용하는 방식을 그리 권장하고 싶지는 않습니다.

파이썬 – 클래스를 사용하지 않기 더보기

이니셜라이저 – Swift

Swift의 클래스와 구조체, enum 객체들은 사용하기 전에 반드시 초기화되어야 한다. 그러면 초기화(initialization)이란 무엇인가? 객체의 생성 자체를 초기화과정에 포함시키는 관점과 그렇지 않은 관점이 있지만, 여기서는 “객체를 만들어서 사용가능한 상태로 준비하는 일”이라고 보자. let foo = Foo() 와 같이 특정한 타입의 인스턴스를 생성하는 구문을 실행했을 때 저 아래(?)에서 벌어지는 과정은 다음과 같다.

이니셜라이저 – Swift 더보기

프로퍼티 상속 파고들기 – Swift

Swift의 클래스 상속과 관련하여 이니셜라이저의 동작 규칙은 안정성이라는 측면을 아주 중요하게 여기고 있어서 몇 가지 규칙이 강제되고 있다. 이 규칙은 컴파일러에 의해서 강제되고 있기 때문에 이니셜라이저를 작성할 때 주의를 기울여야 하고, 그렇지 않으면 언뜻 보기에 아무런 문제가 없는 것 같은 코드가 컴파일이 되지 않는 경우가 많다.

이니셜라이저와 더불어서 프로퍼티 역시 작성할 때 주의해야 할 부분이 몇 가지 있다. 문제는 이니셜라이저와 마찬가지로 클래스를 상속하는 상황에서 프로퍼티 상속과 관련되는 케이스가 많아지고 헷갈리는 상황을 제법 접할 수 있게 된다는 것이다. 이번 글에서는 프로퍼티의 상속에 관한 여러 사례들을 검토해보도록 하자.

프로퍼티 상속 파고들기 – Swift 더보기

Swift의 클래스 초기화

공식 문서 일부를 번역한 글 입니다. (수정: 2019.06.18)

용어 번역 및 의미

  • initializer – 초기화 메소드. 객체 인스턴스가 생성될 때 호출되는 init(*)류의 이니셜라이저
  • designated initailizer – 지정 초기화메소드. 해당 클래스 레벨에서 새롭게 추가된 프로퍼티를 모두 초기화할 수 있는 메소드. 부모 클래스의 지정 초기화메소드를 호출해야 한다.
  • convenience initializer – 편의 초기화메소드. 프로퍼티에 적절한 기본값을 추가하여 호출을 간단하게 만든 초기화메소드. 반드시 해당 클래스의 지정 초기화 메소드를 호출해야 한다.
  • 초기화 – Swift에서는 객체를 생성할 때 객체가 요구하는 크기만큼의 메모리를 할당받은 후, 모든 프로퍼티는 해당 객체가 사용되기 전에 반드시 적절한 초기값을 가져야 한다. 프로퍼티에 초기값을 지정해 주는 행위
  • 멤버 – 프로퍼티. 일반적인 의미로 멤버라고 부른다.

클래스 상속과 초기화

프로퍼티가 자동으로 0 혹은 nil로 초기화되는 Objective-C와는 달리 Swift에서는 모든 저장 프로퍼티에 대해서 명시적으로 초기화가 이루어져야 한다. (그렇지 않은 경우 컴파일러가 오류를 내놓는다.)

Swift의 클래스 초기화 더보기