라이브러리 및 어노테이션

서지우·2023년 7월 14일
0

JAVA

목록 보기
26/28

lombok라이브러리 설치

vscode 확장팩에서 아래의 그림과 같이 설치를 해준다.

구글창에 maven을 치면 아래의 그림과 같이 나오고 들어가면 된다.

라이브러리가 저장되어 있는 사이트이다.

검색창에 lombok을 적고 검색해서 아래의 롬복과 함께 다운로드를 해준다.

다운로드 된 jar파일을 lib폴더를 만들어 넣어준다.

vscode의 왼쪽하단에 JAVA PROJECT가 있는 곳에서 해당 그림처럼 확인 해준다.

그럼 완료!!


어노테이션

매개변수=인자=parameter
: 함수에서 전달된 값을 받는 변수
인수=argument
: 전달된 값

접근자 / 설정자 자동생성

@Getter와 @Setter
: 클래스 레벨에 @Getter 또는 @Setter를 선언해줄 경우, 모든 필드에 접근자와 설정자가 자동으로 생성


생성자 자동 생성

@NoArgsConstructor 어노테이션
: 파라미터가 없는 기본 생성자를 생성
@AllArgsConstructor 어노테이션
: 모든 필드 값을 파라미터로 받는 생성자
@RequiredArgsConstructor 어노테이션
: final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어줌

this를 적어서 가져오면 파라미터꺼
그냥 a,b 이렇게 적으면 아규먼트꺼


toString메소드

@ToString 어노테이션
: toString() 메소드를 작성


@Data

@Data
: @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode을 한꺼번에 설정


실습 - ch00 / Study06.java

주석으로 설명

package ch00;

class Person{
    // 인스턴스의 사적인 속성은 private로 숨긴다
    private String name;
    private boolean male;

    public Person(String name, boolean male) {
        this.name = name;
        this.male = male;
    }

    // 인스턴스의 사적인 속성을 외부에서 요청할때
    // 가공해서 전달할 수 있다
    // boolean을 제외한 나머지 타입은 get~을 사용한다.
    public String getName(){
        return this.name.substring(0, 1) + "씨 입니다.";
    }

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

    public void setMale(boolean male){
        this.male = male;
    }

    // boolean은 get 대신에 is를 사용할 수도 있다.
    public boolean isMale(){
        return this.male;
    }

    // @Override와 같은 것들을 어노테이션
    // 주석 -> 사람이 보라고 만든 설명
    // 어노테이션 -> 컴파일러, JVM 등이 읽을 수 있는 설명
    // Override와 같이 적어도 되고 안적어도 되는 경우가 있다
    // 상황에 따라 필수적으로 적어야 되는 어노테이션도 있다.
    // 프로그램(컴파일러, JVM)은 어노테이션을 참고해서 특수한 기능을 수행할 수 있다
    // 예를 들어 @Override 부모의 메소드를 사용하지 않고 새로운 로직을 사용하겠다는 뜻
    @Override
    public String toString() {
        return "저는 " + this.name + "이고 " + (this.male ? "남자" : "여자") + "입니다.";
    }

    
}

public class Study06 {
    public static void main(String[] args) {
        // 사람이 태어남
        Person person = new Person("홍길동", true);

        // 겉으로 봐서는 사람의 이름을 알 수가 없다
        // System.out.println(person.name);

        // 너 이름이 뭐야?
        System.out.println(person.getName());

        // 너 남자야?
        System.out.println(person.isMale());

        // 너에 대해서 설명해줘
        // 인스턴스를 print하면 toString메소드가 실행된다
        System.out.println(person);
        System.out.println(person.toString());

        Person person2 = new Person("김자옥", false);

        System.out.println(person2);

        Person nick = person2;

        System.out.println(nick);

        // 남자로 성전환 해
        person2.setMale(true);

        System.out.println(person2);

        // 임꺽정으로 이름 바꿔
        person2.setName("임꺽정");

        System.out.println(person2);
    }
}

실습 - ch00 / Study07.java

주석으로 설명

package ch00;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

// 롬복 라이브러리

// 어노테이션을 읽어서 생성자를 만들어준다.
@AllArgsConstructor 
@NoArgsConstructor
// getName, setName 등 필드의 데이터를 읽거나 수정하는 메소드를 자동으로 만들어준다
@Getter
@Setter
// 인스턴스의 정보를 정리해서 보여주도록 toString을 오버라이딩한다.
@ToString
class Cat{
    private String name;
    private boolean male;
    public char[] name2;

    // 생성자를 만들었는데
    // 이렇게 만들지 않아도 어노테이션을 붙이면 그냥 쉬움
    // public Cat(String name, boolean male) {
    //     this.name = name;
    //     this.male = male;
    // }

    // lombok 사용 중에도 변경하고 싶은 메소드만 작성하면
    // 나머지는 기본적으로 작성이 되고
    // 직접 작성한 것은 덮어씌어진다
    public String getName(){
        return this.name + "입니다";
    }

}

public class Study07 {
    public static void main(String[] args) {
        // 고양이 태어남
        Cat cat = new Cat();

        // 고양이야 이름이 뭐야?
        System.out.println(cat.name2);

        // 고양이 수컷이야?
        System.out.println(cat.isMale());

        // 이름 나옹이로 바꿔줘
        cat.setName("냐옹이");

        // 너에 대해서 알려줘
        // cat 또는 cat.toString()
        System.out.println(cat);
    }
}

실습 - ch00 / Study08.java

주석으로 설명

package ch00;

import lombok.Getter;
import lombok.ToString;

class Animal {
    protected String name;
}

@ToString
@Getter
class Cat extends Animal {

    public Cat(String name){
        this.name = name;
    }

    public void cry(){
        System.out.println("야옹");
    }
}

public class Study08 {
    public static void main(String[] args) {
        Cat cat = new Cat("dd");

        cat.cry();

        // 조상 클래스로 캐스팅하는 것을 업캐스팅이라고 한다
        Animal animal = (Animal) cat;

        // 자손이 cry를 가지고 있더라도
        // 업캐스팅 시 사용할 수 없다
        // animal.cry();

        // 자손 클래스로 캐스팅하는 것을 다운캐스팅이라고 한다
        Cat cat1 = (Cat) animal;

        cat1.cry();

        System.out.println(cat1);

        Animal animal2 = new Animal();

        Cat cat2 = (Cat) animal2;

        cat2.cry();
    }
}

실습 - ch00 / Study11.java

주석으로 설명

package ch00;

import lombok.Getter;
import lombok.ToString;

// 데이터를 고정적으로 제한할 때 사용한다
enum Gender{
    MALE, FEMALE
}

@Getter
@ToString
class Person{
    private String name;
    private String gender;

    public Person(String name, Gender gender) {
        this.name = name;
        this.gender = gender.name();
    }

}

public class Study11 {
    public static void main(String[] args) {
        Person person = new Person("홍길동", Gender.MALE);

        System.out.println(person);
    }
}

숨겨져 있는 파일을 다 볼 수 있는 프로그램이다.

profile
미래가 기대되는 풀스택개발자 공부 이야기~~

0개의 댓글