5.20

w0nyyy·2022년 5월 20일
0

7.2.2 nil 인스턴스를 위한 메서드 작성

  • 포인터 메서드 사용
  • nil 인스턴스: 슬라이스, 맵, 포인터 등
    - 위 타입의 제로 값이 nil

7.2.3 메서드도 함수이다

  • 메서드를 변수에 할당하거나 함수의 입력으로 반환값으로 사용 가능
    ⇒ 메서드 값(method value)
  • 메서드 (표현)식
    ⇒ 타입 자체로 함수 생성
    - 메서드 표현식을 이용하여 메서드를 호출할 때는 첫 번째 인자로 메서드 리시버를 사용

7.2.4 함수와 메서드 비교

7.2.5 타입 선언은 상속되지 않는다

  • 다른 타입 기반으로 (사용자 정의) 타입 선언
    - 상속이 아니다.
    - 계층이라는 개념이 없다.
    - 타입들은 서로 동등한 레벨이다.
  • 기본 타입이 내장 타입인 사용자 정의 타입의 경우 해당 기본 타입의 연산자와 함께 사용할 수 있다.
  • 또한 기본 타입과 호환되는 리터럴 및 상수를 대입할 수 있다.

7.2.6 타입은 실행가능한 문서

  • 사용자 타입을 선언하는 시점
    1) 구조체의 경우 우리가 필요한 시점
    2) 기존 타입을 기반으로 사용자 정의 타입을 선언하는 것은
    - “타입은 문서이다”를 기준으로 삼자
    - 개념을 위한 이름을 타입 이름으로 지정하여 코드를 더 명확하게 하고 기대되는 데이터의 종류를 기술할 목적으로

7.2.7 열거형을 위한 iota

  • 열거형(enumeration, enum)
    - 카테고리성 데이터, 명목형 데이터를 나타내기 위함
    : 도시 - 서울, 부산, 인천, ...
    이메일 종류 - 미분류, 스팸, 소셜, 비즈니스, ...

    - 기본 값은 정수이지만 그리고 정수를 사용(연산)할 수는 있지만 권장하지 않음

  • Go에서 열거형 만들기
    1) 모든 유효한 값을 나타내는 정수 기반의 타입 정의
    2) 값의 집합을 만들기 위해 const 블록 사용
    3) const 블록에서 1)에서 선언한 타입의 첫 번째 상수에 iota 지정

7.3 구성(composition)을 위한 임베딩 사용

  • composition over inheritance
    : 클래스 상속보다는 객체 구성 선호

7.4 임베딩은 상속이 아니다

7.5 인터페이스

  • 암묵적 인터페이스
    : Go의 유일한 추상 타입

  • 인터페이스의 목적/용도
    - 스펙을 정의
    - 인터페이스를 사용하려면 인터페이스의 요소를 완성/구현(implement)해야 함
    - 이를 통해 타입의 안정성을 높이고 디커플링을 가능

  • interface 키워드

  • 인터페이스 리터럴
    - interface {
    ...
    }

  • 위 ...에는 인터페이스를 만족시키기 위한 구체적 타입에서 반드시 구현(implement)해야 할 메서드 시그니처 나열

  • Go에서 관례적으로 인터페이스 이름은 끝에 ‘er’을 붙인다

  • 인터페이스는 모든 블록에서 선언 가능

0개의 댓글