사실 우리가 특정 클래스를 이용하다보면 자신이 수동으로 생성한 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 |