D:\폴더명\apache-maven-3.9.6\bin깃에 올라가는거 방지 ~


cmd에 설치 잘 되었는지 확인해주기
mvn -v

mvn archetype:generate
다운중 ...
enter + enter
groupId : 소속된 그룹(도메인 방식)
예) org.project
D드라이브 이름 폴더에서 만들기

artifactId : 프로젝트 구분 명칭





🔽
src/main/java: 작성한 자바코드(.java)
src/main/resources: 정적 자원

🔽
src/test/java : 테스트 자바 코드(.java)
src/test/resources : 테스트시 필요 정적 자원
pom.xml : maven 설정 파일
👩🏫참고) node: package.json 파일과 동일한 역할
#자바 버전 수정
<?xml version="1.0" encoding="UTF-8"?>: xml 선언자 (xml파일로 인식하게끔 해준다.)
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> : 소스 인코딩, 3바이트 형태
<maven.compiler.source>17</maven.compiler.source> : 소스 컴파일 자바 버전
<maven.compiler.target>17</maven.compiler.target> : 배포 파일(jar) 생성시 자바 버전
</properties>

<dependencies>
#추가할 의존성
# 프로젝트에 필요한 라이브러리
</dependencies>
dependency태그 안에 있는 라이브러리가 자동 추가된다.

🔽getter setter 자동생성해 줄 의존성 추가하기

두군데 다 가능

#의존성 추가
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
<scope>provided</scope>
</dependency>


💥의존성 추가 완료 !!
C 드라이브
사용자/.m2 -> 메이븐 레포지토리 (공유)
메이븐에서 의존성 추가하면 없던 의존성은 m2 다운받아져서 관리한다.
동일한 의존성이 다운받아져있으면 m2에서 다 공유해서 가져다 쓴다.


<scope>test</scope>
배포할때 포함시킬지 말지 여부를 설정
compile (기본값) : 빌드시(컴파일시) 포함, 배포시 포함
runtime : 빌드시 포함 X, 실행할때는 필요한 라이브러리(동적로딩 - Class.forName(...))
provided : 개발시에만 필요, 빌드 및 배포시에는 미포함 -> 플랫폼 내에서 제공되는 라이브러리
예) servlet-api, servlet.jsp-api
test : 테스트 시에만 필요한 라이브러리
mvn compile : java 파일 -> class 컴파일 (target 폴더)
- 일괄 컴파일 -> 하기 전 clean 먼저 하는게 좋음 -> 🔖
mvn clean compile
mvn clean : 컴파일 소스 전체 지우기(target 폴더 삭제)
- 기존 컴파일 소스가 있으면 충돌 발생
예) 기존 컴파일 소스 삭제 후 다시 컴파일
mvn clean compile
mvn clean 후 target폴더 삭제
mvn test : 테스트 케이스를 실행(전체)
- AppTest 파일
mvn package : 배포 파일 생성(jar)
1. compile -> 2. test -> 3. package(jar파일 만들어짐) -> 테스트 미통과시 배포 X
mvn) 기존 컴파일 소스 삭제 후 배포 실행
-> clean 먼저하기mvn clean package
실행가능한 자바 아카이브 파일 생성
: jar 파일 실행 ->java -jar 파일명.jar
인텔리제이에 maven이 탑재되어있다. 아이콘 존재


명령기록되어있는 곳에서 명령어를 선택해서 cmd에서 한 것 처럼 실행시킬 수 있다.
앞으로 직접 생성 할 필요 없이 인텔리제이에서 실행시킬거임!!
📌인텔리제이에서 메이븐 프로젝트 생성하기

📌 pom.xml 수정
properties와 의존성추가(필요한 라이브러리) + 동기화하기 sync 버튼
lombok 의존성 추가는 maven repository에서 코드 받아오기

👩🏫참고
버전표기법
1.18.32
Major.Minor.Patch
Major- 기존 버전과 호환되지 않은 버전
Minor - 기존 버전과 호환에는 문제 x
Patch - 오류, 기능 개선

🔖@Getter : - getter 패턴 자동 생성
🔖@Setter : - setter 패턴을 자동 생성
🔖@ToString : - toString 패턴을 자동 생성
@ToString.Exclude - toString()에 배제할 항목
@ToSTring.Include - toString()에 추가


🔖@NoArgsConstructor : 기본 생성자(매개변수 X)

🔖@AllArgsConstructor : 모든 매개변수를 초기화하는 생성자 패턴

🔖@RequiredArgsConstructor : 초기화가 반드시 필요한 멤버 변수를 매개변수로 하는 생성자
특정 멤버변수만 매개변수로 할때 사용

1. 멤버 변수가 상수(final)일때


🔼 해당 애노테이션에서 필수 인자 알아서 생성해줌

값 잘 들어가있다! final을 가지고도 생성자 매개변수에 들어가는 값을 지정해 줄 수 있다.
2. @NonNull이 붙어 있는 멤버 변수

@EqualsAndHashCode : equals, hashcode 메서드 자동 생성🔖@Data : @Getter + @Setter + @ToString + @EqualsAndHashCode -> 한번에 추가
🔖@Log : log 멤버 변수 자동 추가
trace(), debug() .info(), warn() ...
🔖@Builder : builder 패턴 자동 완성
👩🏫참고)builder 패턴
- 값을 설정 -> 객체를 내부에서 생성하는 패턴
외부에서 객체 생성 X- 기본 생성자 접근제어자: private
- setter를 대신 할수 있는 대안적인 패턴
- 1) 정적 내부 클래스인 Builder
- 객체를 생성
- 멤버 변수 초기화(
메서드 체이닝)- 멤버 변수명과 동일한 메서드명(setter를 대신)
- 2) build()를 통해서 생성된 객체 반환
#Builder패턴 구조 알기
#하단 코드 대신 lombok을 통해서 사용하면 된다.
package member;
import java.awt.print.Book;
import java.time.LocalDateTime;
public class User {
//내부에서 객체 생성 목적
private String userId;
private String userNm;
private String email;
private LocalDateTime regDt;
private User(){
} //기본 생성자 접근 통제
@Override
public String toString() {
return "User{" +
"userId='" + userId + '\'' +
", userNm='" + userNm + '\'' +
", email='" + email + '\'' +
", regDt=" + regDt +
'}';
}
public static Builder builder(){
return new Builder(); //Builder 클래스 객체 반환
}
//내부에 정적 클래스 정의 (객체 만들고 값 설정)
public static class Builder{ //내부에서 빌더클래스를 통해서 객체 생성해서 반환해줄거임
private User user = new User(); //객체생성
public Builder userId(String userId){
user.userId = userId; //값 설정
return this; //builder는 메서드 체이닝방식 -> (this) 같은 객체를 연달아 반환
}
public Builder userNm(String userNm){
user.userNm = userNm;
return this;
}
public Builder email(String email){
user.email = email;
return this;
}
public Builder regDt(LocalDateTime regDt){
user.regDt = regDt;
return this;
}
public User build(){ //완성된 객체 내보냄
return user;
}
}
}
/builder 패턴은 기본 생성자가 private이다. 기본 생성자를 꼭 써야하는경우
//편법으로... @NoArgsConstructor, @AllArgsConstructor 사용

메서드 체이닝 방식으로 불러온다.

@Builder 사용하면 간단하게 만들수있다.
#user02클래스

#test클래스
