IntelliJ와 Lombok을 이용해 프로젝트 만들기(1)

hyunn·2021년 8월 1일
0

Java-basic

목록 보기
17/26
post-thumbnail

IntelliJ 설치

장점

컴파일 & 저장 자동

lombok 적용 가능 (VSCode도 가능)

Lombok 롬복

Lombok?

Lombok은 Annotation을 이용해 어노테이션 기반으로 코드를 자동완성 해주는 라이브러리
컴파일 시점에 Getter, Setter, 생성자, toString, Builder 등을 자동으로 생성

보통 기본으로 설치되어있음

- Plugins - Lombok 검색 - installed 확인

Lombok 장점

어노테이션 기반의 코드 자동 생성을 통한 생산성 향상
반복되는 코드 다이어트를 통한 가독성 및 유지보수성 향상
Getter, Setter 외에 빌더 패턴이나 로그 생성 등 다양한 방면으로 활용 가능

Lombok 초기 설정

  1. IDE에서 setting -> Plugin 확인
  2. 현재 프로젝트에 대한 setting -> UTF-8

관련 설정

- Build, Execution, Deployment

  &nb - Compiler - Annotation Processors - 맨 위에 Enable ~~~ 체크 후 apply

    - Build Tools - Graddle - using : IntelliJ IDEA 설정

Lombok Maven - 프로젝트 설정

Lombok Maven

위 링크에서 gradle 선택 - 복사

build.graddle 파일 내 dependencies 부분에 추가

dependencies {
    ...
    /*아래 문장 추가*/
    
    // https://mvnrepository.com/artifact/org.projectlombok/lombok
    compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.20'
    annotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.20'
}



맛집 찾는 프로그램

1. Store 클래스 정의

public class Store {
  String name;	    //가게이름
  double lat, lng;  //위도, 경도
  String menu; 	    //가게메뉴
  double score;	    //평점
}

2. StoreService 클래스에 findByMenu 메서드 정의

class StoreService {
 public StoreService() {
 
 }
 
 public Store findByMenu (String menu) {
 
 }
}

Sequence Diagram 표현

@@@주의@@@

패키지는 무조건 소문자로만!!!

클래스는 대문자로 메서드는 소문자로 시작




IntelliJ와 Lombok 사용해 프로젝트 만들기


[StoreDTO] 클래스 생성

StoreDTO.java 생성

Lombok 적용하기

롬복 적용되는지 확인?

-> 클래스 위에 @Data 입력

@Data
public class StoreDTO {

}

입력하고 망치모양(Build Project) 버튼 선택

프로젝트 폴더에 Build 폴더 생성

해당 폴더 제일 안에 클래스 생성되었는지 확인하기 -> build폴더 수정은 XXX

@Data

lombok에 자주 사용하는 어노테이션
@getter @setter @tostring @RequireArgsConstructor @EqualsAndHashCode 한번에 설정
즉 모든 필드를 대상으로 접근자와 설정자가 자동 생성
final, tostring, equals, hashCode 메소드도 자동 생성

StoreDTO 틀 잡기

import lombok.Data;

@Data
public class StoreDTO {
    private String name;
    private double lat, lng;
    private String menu;
    private double score;
}

main 메서드를 [Main] 클래스로 따로 분리해서 만들기

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

StoreDTO에 Annotation 추가

Main 클래스에 생성자 추가하는 대신 StoreDTO에 annotation추가

//요즘은 생성자 대신 아래 3개의 annotation 같이씀
@AllArgsConstructor
@Builder
@NoArgsConstructor

@AllArgsConstructor

모든 변수를 파라미터로 받는 생성자 자동완성

@Builder

해당 클래스의 객체의 생성에 Builder패턴 적용
모든 변수들에 대해 build하기를 원한다면 클래스 위에 @Builder
특정 변수만을 build하기 원한다면 생성자를 작성하고 그 위에 @Builder

@NoArgsConstructor

파라미터 없는 기본 생성자 자동완성

Main 클래스에서 StoreDTO 불러오기

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!");
		
        //builder().build(); -> 생성자가 많고 복잡할때
        StoreDTO storeDTO = StoreDTO.builder()
                .name("가게이름")
                .lat(37.1234)
                .lng(127.23332)
                .menu("쌈밥")
                .build();

        System.out.println(storeDTO);
    }
}

Builder -> builder().build(); 를 통해서 get set toString 등의 생성자 명령어들이 실제로는 생성되지 않았지만 생성된 것처럼 작동해서 코드의 길이를 획기적으로 줄여주고 가독성을 높이고 유지보수를 용이하게 함

한글 사용 설정

!! Windows에서는 한글 사용 시 MS949 Error발생

Actions 검색 ( Ctrl + Shift + a )

- VM 검색 -> Edit Custom VM Options

- 맨 아래에 아래 문장 추가

-Dfile.encoding=UTF-8

중간 실행 결과

Hello World!
StoreDTO(name=가게이름, lat=37.1234, lng=127.23332, menu=쌈밥, score=0.0)

실행 후 build 폴더 생성

build에 생기는 class파일 확인

-> 열면 실제 자바파일이 아니라 읽을 수 있게 자동으로 디컴파일되어서 열림

클래스파일 확인해보면 getter setter toString까지 다 생긴거처럼 보임 -> 실제론 생기지 않았음!


로직위주의 클래스

메소드 우선 설계

파라미터와 리턴타입으로 데이터 위주의 클래스 타입 (StoreDTO) 활용

생성자 의미 - Ready 준비

멤버변수 - 누적 / 상태 / 조력자

0개의 댓글