Kotlin

Kotlin 의 확장함수가 좋은 이유

dev_roach 2022. 3. 18. 13:26
728x90

사실 우리가 특정 클래스를 이용하다보면 자신이 수동으로 생성한 Mapper 혹은 라이브러리로 만들어진 Mapper 를 통해서 해당 클래스를 변환해야 하는 일이 생길 수 있다. 근데 나는 이런 Mapper 를 쓰는게 좋은 코딩이지는 잘 모르겠다. 너무 번잡하게 만드는 것이 아닌가? 라는 생각이 든다. 그래서 공통모듈 Mapper 를 쓰는걸 좋아하지 않는다. 코드로 설명하면 대략적으로 아래와 같다.

Integer a = 10;
String  b = StringMapper.from(a);

System.out.println(b) // "10"

위의 코드가 Mapper 를 쓰는 예시인데 나는 이게 객체지향스러운가 라는 의문도 있긴하다.

사실 대부분 위처럼 쓰는 사람은 많지 않을테고, 아래처럼 쓰는 경우가 훨씬 많다.

Integer a = 10;
String  b = a.toString();

System.out.println(b) // "10"

나는 이 부분이 좀 더 객체지향스럽다. 라고 생각하는데 

그 이유는 우리는 Integer 가 String Class Type 으로 어떻게 변환되는지는 잘 모르지만, Integer 에게 String Type 으로 변환 가능한지를 묻고, Integer 내부에서 String 으로 바뀌어서 나오기 때문이다. 서론이 길어졌는데 이래서 확장함수가 정말 좋은 기능이라고 생각하는데, 그 이유는 예를 들면 String 을 A class 로 바꿔야 한다고 해보자.

 

이렇게 됬을때 어떻게 해야할까? 둘중 하나이다 A 에 ConvertMethod(예를 들면 from 또는 of 와 같은) 를 만들던가 아니면 mapper 를 만들던가 해야할 것이다. 근데 Kotlin 에서는 한가지 방법이 하나 더 있는데 String Method 를 확장시키는 것 이다.

String.toA(): A {
	TODO("return A Objcet")
}

A 에 Convert 해주는 메소드를 두고 저런식으로 확장함수를 두고 사용하면 아래와 같이 사용이 가능하다.

String b = "roach"
A roachA = b.toA()

훨씬 더 명료하고 깔끔해졌다고 생각한다.

개인적으로 Ruby 를 해본 사람들은 Ruby 에서는 완전한 객체지향을 한다고 위와 같은 방식으로 된 코드들이 있다는 것을 알 것이다. 

나는 이 방법이 깔끔해서 코틀린 와서는 최대한 확장함수로 뽑아 낼 부분들을 찾아내서 뽑아내려고 한다.

'Kotlin' 카테고리의 다른 글

고차함수에서 Return 이 안되는 이유  (1) 2022.05.03
Kotlin DSL  (0) 2022.03.28
Ko-Test Framework 사용해보기  (0) 2022.01.21
Kotlin 에서 Null 을 다루기  (0) 2022.01.18
[Kotlin Spring] Logger 를 간편하게  (0) 2021.12.14