관리 메뉴

hyeals study

[코틀린] 연산자 오버로딩 & 관례 - (1) 산술연산자 오버로딩 본문

코틀린

[코틀린] 연산자 오버로딩 & 관례 - (1) 산술연산자 오버로딩

hyeals 2020. 2. 25. 19:57

* 관례(convention): 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법.

☞ ex) 어떤 클래스 안에 plus라는 특별한 메소드를 전의하면 그 클래스의 인스턴스에 대해 + 연산자를 사용할 수 있음

 

* 코틀린에서 관례를 사용하는 가장 단순한 예시가 산술연산자임.


[이항 산술 연산 오버로딩]

 

- 이 포스팅에서 사용하는 Point 클래스는 화명 상의 점을 표현하는 클래스임

 

 

plus 연산자 구현 예시
출력 결과

  • plus 연산자 함수: 두 점의 x 좌표와 y 좌표를 각각 더하는 함수. (멤버 함수)
  • operator 키워드: 연산자를 오버로딩하는 함수 앞에는 반드시 operator 키워드를 붙여야 함. (operator 키워드를 붙임으로써 어떤 함수가 관례를 따르는 함수임을 명확히 할 수 있음)

☞ 이처럼 operator 변경자를 추가해서 plus 함수를 선언하고 나면 + 기호로 두 Point 객체를 더할 수 있음.

 

※ 오버로딩이 가능한 이항 산술 연산자 종류

함수 이름
a * b times
a / b div
a % b mod
a + b plus
a - b minus

[복합 대입 연산자 오버로딩]

 

* 복합 대입 연산자(compound assignment): +=, -= 등의 연산자

함수 이름
a += b plusAssign
a -= b minusAssign
a *= b timesAssign
  • "a += b" 는 "a = a.plus(b)""a.plusAssign(b)"로 번역할 수 있음

[단항 연산자 오버로딩]

 

* 단항 연산자도 이항 연산자와 마찬가지로 정해진 이름의 함수를 선언하면서 operator로 표시하면 됨.

 

단항 연산자 정의 예시 (확장 함수 사용)
출력 결과

  • 위 코드에서 단항 minus 함수는 파라미터가 없음을 알 수 있음
  • 위 코드에서 단항 연산자를 멤버 함수로 만드는 대신 확장함수로 정의했음.

※ 오버로딩할 수 있는 단항 산술 연산자 종류

함수 이름
+a unaryPlus
-a unaryMinus
!a not
++a, a++ inc
--a, a-- dec

 

 

 

본 게시물은 "Kotlin IN ACTION"을 참고함.

Comments