참고)
npm
yarn
maven apache
https://maven.apache.org/

압축해제

ㄴ 깃에 안올라가게 설정
ㄴ -* : 버전이 바껴도 안올라게 설정

ㄴ 명령어



ㄴ 경로 굳이 일일이 입력 안해도 명령어 쓸 수 있도록 설정하기
ㄴ D:\박세현\apache-maven-3.9.6-bin\apache-maven-3.9.6\bin] : 이름 파일 경로 넣어주기

ㄴ 잘 설정됬는지 쳌

ㄴ 파일 이동
ㄴ mvn archetype:generate : maven 프로젝트 생성 할 수 있게 무슨 창 뜨는??

ㄴ 엔터 2번 누르기

ㄴ 입력하고 엔터

ㄴ 프로젝트 식별명칭 : exam01 엔터
ㄴ 그냥 엔터

ㄴ 그냥 엔터 : 그룹아이디랑 동일한 패키지명 쓰기로
ㄴ artifactId : 프로젝트 구분 할 수 있는 아이디

ㄴ y 엔터

ㄴ trust 프로젝트

mvn archetype:generate예시)

ㄴ 접근 가능 = main에서 test로 접근가능

ㄴ 접근가능 = test끼리 접근 가능

ㄴ 접근❌ = test에서 main으로는 접근불가
참고)
node : package.json 파일과 동일한 역할
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> : 소스 인코딩
<maven.compiler.source>17</maven.compiler.source> : 소스 컴파일 자바 버전
<maven.compiler.target>17</maven.compiler.target> : 배포 파일(jar) 생성시 자바 버전
</properties>
<dependencies>
</dependencies>
사용자명/.m2 -> 메이븐 레포지토리 (공유)예시)

ㄴ 선언자

ㄴ source : 작업시 버전
ㄴ target : 배포시 버전 (maven을 가지고 build할 때)

ㄴ 의존성
예시) 사용자명/.m2 -> 메이븐 레포지토리 (공유)


ㄴ jar : 자바 아카이브, 클래스 파일들이 포함되어 있다
mvn clean compile : 기존 컴파일 소스 삭제 후 다시 컴파일
mvn compile : java 파일 -> class 컴파일 (target 폴더)
mvn clean : 컴파일 소스 전체 지우기(target 폴더 삭제)
clean 하고 compile하는게 좋음
-> mvn clean compile
mvn test : 테스트 케이스를 실행(전체)
mvn package : 배포 파일 생성(jar)
내부적으로 : compile -> test -> package(jar)
-> 테스트 미통과시 배포 X
mvn clean packagejava -jar 파일명.jarCTRL + SHIFT + B
버전 표기법
1 .18. 32
(Major) (Minor) (Patch)
lombok.jar :get, set, toString...이런거 자동으로 기능 가져오기...?
maven central(공식) : 의존성 저장소
참고) maven central repository
https://central.sonatype.com/
mvnrepository(비공식) : 의존성 저장소, 이걸 더 많이 사용
참고) mvnrepository
https://mvnrepository.com/
예시) 컴파일
1번 방법

2번 방법

↓ 컴파일 하면 컴파일한 모든 클래스 파일이 target으로 감

ㄴ 컴파일한 파일들은 target에 존재하게 됨
예시) 컴파일한거 지우기

ㄴ target 없어짐
예시) 이렇게 컴파일 하는게 일반적

ㄴ 클래스파일을 컴파일 할 대 덮어씌우는 형식으로 컴파일 되서 이렇게 해야한다...
예시) 테스트_mvn test

예시) mvn clean package


ㄴ 이게 실행 될 거 : 실행 될 애플리케이션

ㄴ target으로 옮기기
ㄴ 애플리케이션 실행
예시) 메이븐 설치안하고 하는 법

ㄴ sync

ㄴ 명령어 입력
예시) 인텔리제이 기능을 활용해서 메이븐 프로젝트 생성

ㄴ mvn archetype:generate : 메이븐 프로젝트 생성
-> 이거 구찮
-> 인텔리제이 기능을 활용해서 메이븐 프로젝트 생성하자
ㄴ 단, 의존성은 직접 다시 작성해줘야 함




ㄴ 의존성 정의
ㄴ 예시) 메이븐 레포지토리(비공식) 참조해서 의존성 코드 붙여넣기
ㄴ sync 누르기
예시) 메이븐 레포지토리(공식) + 롬복 의존성 설치

예시) 메이븐 레포지토리(비공식)

ㄴ 많이 쓰는거 선택해서 다운받기


ㄴ 의존성 붙여 넣자ㅏㅏㅏ



예시)


ㄴ 어플라이 -> 오케이 누르기
예시) 버전

ㄴ 버전 표기법 참조
예시) 롬복 써보기


ㄴ 데이터 클래스

ㄴ 인텔리제이 제너레이트도 구찮다
ㄴ 롬복 활용해서 애노테이션 쓰면 자동으로 추가

ㄴ 진짜 애노테이션 통해 됬는지 테스트 하고 싶어
ㄴ 직접 소스쪽에 하지 말고 test에서 하자
ㄴ test쪽은 배포할 때 포함되지 않기 때문에 소스 테스트하기 좋음
ㄴ 아 근데 의존성 추가 해줘야 함


ㄴ R, M붙은거는 실험적인게 들어있을 수도 있음


ㄴ 복붙

ㄴ 코드 작성

ㄴ 보통 Plugin은 백그라운드 파일



ㄴ 복붙

ㄴ sync 눌러주기(빨간글씨 사라짐)
ㄴ test를 위한 의존성 추가 완
ㄴ 이제 애노테이션으로 롬복 기능한거 테스트 해보자

ㄴ 오 애노테이션 하니가 자동으로 안보이지만 재정의 해줬넹
-> get(), set() 보이넹

ㄴ 출력해볼까나

ㄴ 음 toString이 재정의 안됬넹

ㄴ toString 도 추가

ㄴ 이제 값으로 잘 나오는군 ㅎㅅㅎ

ㄴ 동등성 비교도 추가~

ㄴ 출력

ㄴ @Data만 해도 겟, 셋, 투스트링, 이콜스앤해쉬코드 다 들어있음

ㄴ 다 나오네
예시) 롬복_ 생성자 애노테이션


ㄴ 기본생성자 없어서 에러 뜸

ㄴ 기본생성자 추가

ㄴ 에러 사라짐
예시) 생성자 접근제어자 바구기



ㄴ 에노테이션 설정 추가해주기
ㄴ enum상수 형태로

ㄴ 접근제어자 private으로 바껴서 에러 뜸
예시1)@RequiredArgsConstructor_@nonnull에노테이션


예시2) @RequiredArgsConstructor_final

ㄴ 상수(fianl)는 값이 꼭 있어야함 = 초기화 하지 않으면 안됨

ㄴ 1번 방법
ㄴ 상수에 값 대입해줌 = 값 변경불가
ㄴ 오류해결

ㄴ 2번 방법
ㄴ 애노테이션으로 초기화 해 줌
ㄴ non null은 값을 변경 가능

ㄴ 초기화 완
예시) @ToString.Exclude

예시) @Builder 안썻을 때 버전
package member;
import java.time.LocalDateTime;
public class User {
private String userId;
private String userNm;
private String email;
private LocalDateTime regDt;
private User() {}
public static Builder builder() {
return new Builder();
}
@Override
public String toString() {
return "User{" +
"userId='" + userId + '\'' +
", userNm='" + userNm + '\'' +
", email='" + email + '\'' +
", regDt=" + regDt +
'}';
}
public static class Builder {
private User user = new User();
public Builder userId(String userId) {
user.userId = userId;
return 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 애노테이션 쓰면 자동으로 위 패턴 싹 만들어 줌
예시) @Builder 적용한거

ㄴ User클래스랑 동일한 식 적용됨

ㄴ 위 @Builder 적용안한 식이랑 똑같게 외부에서 객체생성 못함 = User2클래스의 생성자함수 접근제어자가 private

ㄴ 음 근데 애노테이션 통해서 접근제어자 바꾸면 안되낭
-> 안되더라...에러 뜸
ㄴ 편법이 있음
-> 기본 생성자를 꼭 써야 되는 경우 @NoArgsConstructor @AllArgsConstructor

ㄴ @NoArgsConstructor , @AllArgsConstructor
ㄴ 오 편법 쓰니까 외부에서 객체 생성 된당