CodeGym /Java Blog /무작위의 /주석. 2부. 롬복
John Squirrels
레벨 41
San Francisco

주석. 2부. 롬복

무작위의 그룹에 게시되었습니다
주석. 1부 - 약간 지루함 이 부분에서는 소스 코드 주석의 잘 알려진 대표자인 Lombok 라이브러리를 다루기로 결정했습니다. 다음 기사에서는 런타임 주석을 다루겠습니다. 주석.  2부. 롬복 - 1옛날에 자바 프로그래머가 있었습니다. 그녀는 매일 다음과 같은 일반적인 코드를 작성했습니다.
package lombok;

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        if (age != person.age) return false;
        return name != null ? name.equals(person.name) : person.name == null;
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
이 클래스는 일반적입니다. 필드가 2개뿐입니다(결국 필드가 10~15개가 넘는 경우도 있습니다). 물론 이 모든 것은 IDE에서 생성될 수 있습니다. 하지만 젠장, 그게 그 자리를 차지합니다. 15-20개의 필드가 있는 경우 각 필드에는 getter, setter, 생성자가 필요합니다. 이 모든 것 중에서 눈에 보이지 않는 몇 가지 다른 메서드는 쉽게 손실될 수 있습니다. 이 프로그래머가 더 빠르고 덜 작성하도록 어떻게 도울 수 있습니까? 롬복. 프라이팬에서 나와 불 속으로. 여기에 동일한 클래스가 있지만 이제 Lombok을 사용합니다.
package lombok;

@Data
public class Person {
    private String name;
    private int age;
}
그게 다야. 멋지죠? @Data 주석의 기능 은 무엇인가요 ? 컴파일하는 동안 이 주석은 모든 필드에 대한 getter/setter를 생성하고 표준 규칙에 따라 toString(), equals() 및 hashCode()를 재정의합니다. IDE에 플러그인을 설치할 수 있습니다. 아직 생성되지 않은 메서드가 모두 표시됩니다. 주석.  2부. 롬복 - 2이 시점에서 독자 여러분의 관심이 있기를 바랍니다. 다음 내용은 세부 사항에 대한 링크와 함께 간략한 소개가 될 것이기 때문입니다. Lombok을 사용하면 코드 생성을 사용자 정의할 수도 있습니다. 예를 들어 모든 getter 및 setter가 항상 필요한 것은 아니며 해시 코드를 생성하려면 다른 알고리즘이 필요할 수도 있습니다. 이를 달성하기 위해 별도의 주석이 있습니다(많은 주석에는 설명이 필요하지 않을 것 같습니다): @Getter/@Setter, @ToString, @EqualsAndHashCode, @NoArgsConstructor, @RequiredArgsConstructor 및 @AllArgsConstructor, @Log 흔한. 전체 세트는 여기서 볼 수 있습니다 . var 및 val에 특별한 주의를 기울이십시오. 이는 다음과 같은 코드를 작성할 수 있음을 의미합니다.
package lombok;

import lombok.experimental.var;

@Data
public class Person {
    private String name;
    private int age;

    public static void main(String[] args) {
        var person = new Person();
        person.setAge(22);
        System.out.println(person);
    }
}
이것이 왜 필요한가요? 예를 들어 RandomAccessFileChannel 클래스가 있습니다. 왜 우리는 이런 코드를 작성하고 싶을까요?
RandomAccessFileChannel channel = new RandomAccessFileChannel();
우리가 이것을 할 수 있다면?
var channel2 = new RandomAccessFileChannel();
내 생각에는 이것이 항상 받아들여지는 것은 아니다. 예를 들어, 사악한 지도를 반환하는 사악한 메소드가 있습니다:
public static Map<List<Set<Integer>>, Set<List<String>>> evilMap() {
    return new HashMap<>();
}
다음과 같이 호출하면:
Map<List<Set<Integer>>, Set<List<String>>> listSetMap = evilMap();
그렇다면 우리가 무엇을 하고 있는지는 어느 정도 명확해집니다. 호출이 다음과 같은 경우:
var listSetMap = evilMap();
그러면 악마만이 evilMap()이 거기에서 무엇을 반환할지 알 수 있으며 메서드 자체를 볼 때까지는 알 수 없습니다. 왜 소스 파일을 돌아다니나요? 일반적으로 이에 주의해야 합니다. 실험 분기: 여기에서는 @UtilityClass 주석을 언급하고 싶습니다 . 예외를 발생시키는 비공개 생성자를 생성합니다(그래서 지저분한 작은 손은 거기에 간섭하기 위해 리플렉션을 사용하지 않습니다). 그리고 수업이 시작될 때 매우 아름답습니다. 유틸리티 메소드가 있다는 것을 알려주는 것입니다. @Delegate 주석은 위임 패턴을 구현합니다 . 어떤 것을 다른 클래스에 위임하는 클래스가 있고 일부 메서드만 변경한다고 가정해 보겠습니다. 이 주석을 사용하면 메서드가 중복되는 것을 방지하고 해당 메서드를 추적할 수 있습니다. 메소드를 제거하거나 추가하면 이 주석이 이를 알 수 있습니다. 실험적 주석 분기 GitHub 공식 웹사이트 IDE가 lombok에서 제대로 작동하고 존재하지 않는 메서드를 강조 표시하지 않으려면 플러그인을 설치해야 합니다. 공식 웹사이트에는 각 IDE에 대한 플러그인을 연결하는 방법을 확인할 수 있는 설정 섹션이 있습니다. 보시다시피, lombok은 인기가 많습니다. 별이 5,000개 이상이고 포크가 1,000개 이상입니다. Spring은 클래스에서 lombok을 사용합니다. 프로젝트에 Spring이 있다면 살펴보세요. 여러분도 모르는 사이에 lombok이 도입되었을 수도 있습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION