독서

[코틀린 인 액션] 3장. 함수 정의와 호출

오렌지색 귤 2024. 3. 30. 14:52
반응형

찾아본 내용

 

1. 코틀린의 로컬 함수와 확장 함수 (p.139)

 

코틀린에서는 코드의 가독성과 재사용성을 높이기 위해 로컬 함수와 확장 함수를 사용할 수 있다. 각각의 사용 시나리오는 아래와 같다.

 

로컬 함수

사용 시나리오

  • 특정 함수 내에서만 사용되는 도우미(helper) 함수를 정의할 때 사용한다.
  • 외부에서는 접근할 필요가 없는 함수의 경우, 로컬 함수로 정의하여 캡슐화를 강화할 수 있다.

장점

  • 외부의 접근으로부터 함수를 숨길 수 있어, 더 좋은 캡슐화를 제공한다.
  • 로컬 범위 내에서만 사용되므로, 코드의 가독성을 높이고, 유지보수를 용이하게 한다.


확장 함수

사용 시나리오

  • 기존 클래스에 새로운 함수를 추가할 때 사용한다. 이 때, 클래스의 코드를 수정할 필요가 없다.
  • 기존 라이브러리에 대한 확장이나, API를 사용자 정의 방식으로 확장하고 싶을 때 유용하다.

장점

  • 클래스를 상속받지 않고도 새로운 메서드를 추가할 수 있다.
  • 기존 코드를 변경하지 않고도, 클래스의 기능을 확장할 수 있다.
  • 유틸리티 함수를 클래스에 직접 추가하는 것처럼 사용할 수 있어 코드 사용성이 향상된다.


결론

  • 로컬 함수는 함수 내부에서만 필요한 도우미 함수를 정의할 때 사용하며, 캡슐화와 코드 정리에 유리하다.
  • 확장 함수는 기존 클래스에 새로운 기능을 추가하고자 할 때 사용하며, 클래스의 수정 없이 기능을 확장하는 데 유리하다.

 

 

궁금한 내용

 

1. 아무리 코틀린 문법상 확장 함수는 네이밍이 짧을수록 좋기에 중복이 존재할 수 있다하지만, import 시에 `as` 키워드를 통해서 이름을 바꾸는 것은 가독성 측면에서 좋은 코드는 아닐 것 같은데, 실제로도 많이 사용할까? (p.117)

 

회사 코드에서는 아직 사용되는 부분을 확인해보지 못했다.

 

확장 함수의 목적

  • 기존 클래스에 새로운 기능을 추가하면서 기존 코드를 수정하지 않는다.
  • 간결하고 명확한 이름 사용을 선호하지만, 짧아야 한다는 규칙은 없다.


이름 중복 문제

  • 다른 라이브러리에서 동일한 클래스에 대해 같은 이름의 확장 함수 제공 시 발생한다.
  • `as` 키워드로 임포트 시 이름 변경이 가능하다.

가독성과 `as` 키워드

  • 적절한 사용은 코드의 명확성과 가독성을 높일 수 있다.
  • 불필요한 남용은 코드 추적과 이해를 어렵게 만든다.


사용 빈도

  • 개발자의 선호와 프로젝트 요구사항에 따라 다르다.
  • 팀 내 코딩 규칙이나 스타일 가이드에 따라 결정된다.


결론

  • 필요한 경우에 유용하게 사용되지만, 일관성 유지와 코드의 가독성, 유지보수성을 최우선으로 고려해야한다.
  • 남용하지 않고, 팀 내 합의된 가이드라인에 따라 적절히 사용하는 것이 중요하다.

 

 

2. 코틀린의 3중 따옴표 문자열에서는 역슬래시를 포함한 어떤 문자도 이스케이프할 필요가 없다는데. 일반 문자열을 사용해 정규식을 작성하는 경우 마침표 기호를 이스케이프하려면 `\\.`라고 써야 하지만, 3중 따옴표 문자열에서는 `\.`라고 쓰면 된다. (p.132)

여기서 마침표도 이스케이프할 필요없는데 왜 `.` 가 아닌 `\.`라고 해야되는가?

 

3중 따옴표 문자열의 이점

  • 이스케이프 시퀀스 사용이 필요 없어진다.
  • 역슬래시(`\`)를 직접 사용할 수 있게 되므로 코드가 간결해진다.


정규식에서 마침표(`.`) 사용

  • 마침표는 "어떤 한 문자"를 의미하는 메타 문자로 사용된다.
  • 마침표 자체를 매칭하기 위해서는 이스케이프가 필요하다(`\.`).


3중 따옴표 문자열에서의 정규식 표현

  • 일반 문자열에서는 마침표를 `\\.`로 이스케이프해야 한다.
  • 3중 따옴표 문자열에서는 간단히 `\.`로 마침표를 이스케이프할 수 있다.


결론

  • 3중 따옴표 문자열을 사용하면 정규식을 더 간결하게 표현할 수 있다.
  • 하지만, 정규식의 규칙 자체가 변경되는 것은 아니다.

 

 

참조

 

반응형