Untitled

Java에서의 이슈

  • 자바는 정적 타입 언어

  • 모든 메소드가 하나의 클래스 내에 있어야 함

    별로 이슈가 아닌 것 같지만, String이 담긴 Collection을 자신이 원하는 기준으로 정렬하고 싶을 때 다음과 같은 상황이 일어난다.

    public class StringSorter {
      public List<String> sortByIncreasingLength(List<String> strings) {
          Collections.sort(strings, new Comparator<String>() {
              public int compare(String s1, String s2) {
                  return s1.length() - s2.length();
              }
          });        
          return strings;
      }

    익명 이너 클래스를 사용하여 Comparator 인터페이스를 구현하는 방식을 사용해야 한다. 얼마나 수고스러운가...

  • 연산자 오버로딩이 금지되어 있음

    왜 자바에서는 연산자 오버로딩이 불가능한가? -> 링크1, 링크2

  • 속성과 메서드에 대한 기본 접근은 package private

  • 원시타입(Int, Double 등)을 클래스와 다르게 취급

  • 일관되지 않은 메소드

    Array : length

    String : length

    Collections : size

    Node Lists : getLength

Java와 다른 Groovy

  • Groovy는 모두 size로 통일되어 있다.

  • 타입 타이핑은 옵션 (타입을 모르면 신경쓰지말고 def 키워드를 사용한다.)

  • 위의 사용자 정렬 기준을 Groovy로 표현했을 때

    Collections.sort(strings, {s1,s2 -> s1.size() - s2.size()} as Comparator)
  • 모든 연산자들은 오버로딩이 가능하다. (메소드 호출로 해석됨)

  • 연산자는 plus()를 사용

  • 연산자는 minus()를 사용

    String이든 Collection이든 이 연산자를 사용할 수 있다.

Last updated