JavaRush /Java Blog /Random-KO /주석. 두 번째 부분. 롬복

주석. 두 번째 부분. 롬복

Random-KO 그룹에 게시되었습니다
주석. 조금 지루한 1부 이 부분에서는 소스 주석의 대표적인 대표자로 잘 알려진 Lombok 라이브러리를 다루기로 결정했습니다. 다음 기사에서는 런타임 주석을 사용합니다. 옛날에 자바 프로그래머가 있었는데, 그는 매일 다음과 같은 일반적인 코드를 작성했습니다.
package lombok;

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

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

    public Chelovek() {
    }

    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;

        Chelovek chelovek = (Chelovek) o;

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

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

    @Override
    public String toString() {
        return "Chelovek{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
이는 2개의 필드만 있는 일반적인 클래스입니다(그러나 때로는 10-15개 이상의 필드가 있는 경우도 있음). 예, 물론 이 모든 것이 IDE에서 생성될 수 있지만 젠장, 공간을 차지합니다. 15~20개의 필드가 있는 경우 모두 getter, setter, 생성자가 필요합니다. 이 모든 것 중에서 눈에 보이지 않는 몇 가지 다른 메서드는 쉽게 길을 잃을 수 있습니다. 그러한 프로그래머가 더 빨리, 더 적게 작성하도록 어떻게 도울 수 있습니까? 롬복. 동일한 클래스이지만 Lombok을 사용하여 곧바로 더위에 들어갑니다.
package lombok;

@Data
public class Chelovek {
    private String name;
    private int age;
}
예, 그게 전부입니다. 시원한? @Data 주석은 무엇 을 합니까 ? 컴파일 단계에서는 모든 필드에 대한 getter/setter, toString을 생성하고 표준에 따라 같음 및 hashCode를 재정의합니다. IDE에 플러그인을 설치하면 아직 생성되지 않은 모든 메소드가 표시됩니다.
주석.  두 번째 부분.  롬복 - 1
다음 내용은 짧은 소개와 자세한 내용에 대한 링크이기 때문에 독자 여러분이 흥미로웠기를 바랍니다. Lombok은 생성을 사용자 정의할 수 있는 기회도 제공합니다. 모든 getter, setter 또는 해시 코드를 항상 다르게 생성할 필요는 없습니다. 따라서 별도의 주석이 있습니다(많은 주석에는 설명이 필요하지 않다고 생각합니다) @Getter/@Setter @ToString @EqualsAndHashCode @NoArgsConstructor, @RequiredArgsConstructor 및 @AllArgsConstructor @Log 이것들은 가장 일반적인 주석이며 전체 세트를 볼 수 있습니다 . 여기서 var와 val은 특별한 주의를 기울일 가치가 있습니다. 다음과 같이 작성할 수 있습니다.
package lombok;

import lombok.experimental.var;

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

    public static void main(String[] args) {
        var chelovek = new Chelovek();
        chelovek.setAge(22);
        System.out.println(chelovek);
    }
}
이것이 왜 필요한가요? 예를 들어 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이 인기가 많습니다. >5000개의 별과 >1000개의 포크. Spring은 수업에서 롬복을 사용합니다. 프로젝트에 스프링이 있다면 찾아보세요. 아마도 롬복을 끌어올렸을 수도 있지만 여러분은 모릅니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION