[독서] Programming in Scala : 21장 암시적 변환과 암시적 파라미터

Jayden·2023년 2월 1일
0

독서

목록 보기
2/2

Scala 창시자가 직접 집필한 스칼라 바이블 Programming in Scala. 바이블이라고 불릴 만큼 굉장히 상세하고 그만큼 책이 많이 두껍다.
욕심으로는 처음부터 다 공부하고싶지만 그러기엔 너무 많은 시간이 걸릴 것이기에, 앞으로 scala와 play, akka 등을 공부하고 다루면서 이해가 되지 않는 부분이 있을 때 그 부분을 집중적으로 공부해보려 한다.
그 시작으로 21장 암시적 변환과 암시적 파라미터 를 선택했다. 그 이유는, 앞서서 '누구나 쉽게 스칼라 + 플레이' 라는 책을 후루룩 공부했는데 가장 모호한 부분이 implicit 예약어 였기 때문이다.

간단 정리

결론부터 요약하면 implicit 은 암시적으로 형 변환을 가능하게 해준다.
예를 들면 Int 형의 파라미터를 받는 함수에 Double 형의 데이터를 넣는 경우 다른 언어에서는 type 에러가 발생한다. 하지만 scala 에서 implicit 을 사용하면 자동으로 형 변환이 되도록 만들 수 있다.
Scala 컴파일러는 타입에러가 발생하는 경우 바로 포기하는 것이 아니라 암시적 변환을 할 수 있는 함수나 클래스 등이 스코프 내에 있는지 찾아보고, 가능한 경우 형변환을 하여 에러발생 없이 코드가 진행되도록 한다.

이러한 암시는 아래와 같은 세가지 경우에 쓰인다.

  • 예를 든 것과 같이 예상되는 type이 있는 경우 해당 type으로 변환시키는 경우이다.
  • 호출 대상인 객체의 변환이다. 예를 들어 a.add() 라는 코드를 작성하였으나 a가 add 메서드를 가지고 있지 않고 있고 b가 add 메서드를 가지고 있는 경우에 a를 b로 변환시킬 수 있다면 변환시켜 메서드가 실행되게 하는 경우다. 대표적인 예시는 Map 자료구조를 사용할 때 Map(key -> val) 과 같은 방식으로 사용하는데, 이때 -> 는 scala의 문법이라기 보다는 ArrowAssoc 이라는 클래스의 한 메소드이다. 어떤 값에 대해 ArrowAssoc 으로 형변환하는 implicit 함수가 정의되어 있기에 key 는 ArrowAssoc(key) 로 형변환 되고 -> 메소드가 실행되어 key, val 쌍의 튜플 형태로 return 되고 Map 의 인자로 전달되는 것이다. -> 가 문법인 것처럼 보였듯이 implicit 을 활용하면 새로운 문법을 만드는 것과 같은 효과를 볼 수 있다.
  • 함수의 파라미터로 암시를 사용하는 경우이다. 예를 들어 method(a : Int)(implicit b : User) 와 같은 메소드가 있고 스코프 내에 implicit val user : User = new User() 와 같이 선언된 객체가 있다면 method(a) 와 같이 뒷부분을 생략하고 호출하여도 user 를 자동으로 넣어준다.

암시는 코드를 좀 더 자연스럽고 가독성있게 하고 기존의 자료형들과도 자연스럽게 어우러지게 하지만 아무래도 명시적이지 않은 만큼 조심해서 사용해야 한다. 자칫 잘못하면 코드가 이해하기 어려워지거나 의도한대로 동작하지 않거나 할 수 있을 것이다.

내 생각

implicit 이 대체 뭘까 모호해서 어렵게 생각했는데 책을 읽고 공부해보니 꽤나 재미있는 부분인 것 같다.
스칼라가 유연한 언어라는 말을 봤었지만 이해되지 않았고, -> 와 같은 부분들도 왜 이렇게 만들었을까 이해가 되지 않았었는데 어떤 원리인지 알고나니 오히려 재미가 느껴졌다.
C에서도 float형 변수에 int 데이터를 저장하면 자동으로 형 변환이 되었었는데 스칼라는 이런 부분을 개발자가 활용할 수 있도록 열어둔듯한 느낌도 든다.

scala 를 처음 접했을 땐 난해하게 느낀 부분이 많았는데, 점점 알아가는 재미가 있는 것 같다.
더 많이 알아가보고 싶다!

profile
#코딩 #개발 #몰입 #꾸준함

0개의 댓글