- 강의
- 65강(자바 어노테이션과 메타 프로그래밍) ~ 67강(빌드 도구 Gradle로 프로젝트 만들기)
Annotation
- java의 annotation
- 자바 프로그램의 추가적인 정보를 제공하는 메타 데이터
- 메타 데이터 : 보조 정보
- @를 사용해서 선언
- 종류
- 기본 annotation
- customer annotation
- built-in annotation
- Meta annotation
- general purpose annotation
- 기본 annotation
- 용도
- 컴파일 타임 체크 및 오류 검출
- 문서화(java docs)
- 런타임 추가기능 처리 : 메타 프로그래밍에서 사용
- 컴파일 오류 검출하는 annotation
- @Override
- 부모 클래스에 해당 메서드가 없으면 error 발생
- 메타 정보를 알려주는 annotation이어서 없어도 오류 X
- @ FunctionalInterface : 메소드 1개 초과 시 error 발생
- @Deprecate : 곧 삭제할 메서드라는 것을 알려줌
- @Override
- 문서화(java docs)
- java 프로그래밍 언어의 공식 문서화 도구
- java 클래스, 인터페이스의 세부 정보 확인
- 커뮤니케이션 가능
- annotation을 통한 코드 문서화
- 터미널 : src가 있는 위치로 이동 → javadoc -d ./docs -sourcepath src 패키지명 → docs 패키지 생성
- html 문서 확인
- @param : 매개변수 설명
- @return : 리턴값 설명
- @throws : 에러 설명
- 터미널 : src가 있는 위치로 이동 → javadoc -d ./docs -sourcepath src 패키지명 → docs 패키지 생성
/**
* @param String fileName 파일 이름
@return String 파일 내용 반환
@throws IOException 파일을 찾을 수 없는 경우 에러 발생
*/
public static String readFile(String fileName) throws IOException {
// 파일 읽기
StringBuilder sb = new StringBuilder();
try(FileReader fis = ne FileReader(fileName)) {
int data;
while((data = fis.read()) != -1) {
sb.append((char) data);
}
}
return sb.toString();
}
meta programming
- 프로그램의 메타 데이터를 보고 코드를 작성하는 것
- 주사용 기술
- custom annotation : 기본 이외 직접 정의한 annotation
- reflection & class 클래스 : 런타임 때 해당 클래스 메서드와 변수 접근 가능
annotation 정의하기(customer annotation)
- 메타 어노테이션
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetnetionPolicy.RUNTIME)
@Documented - 어노테이션 정의
public @interface MyAnnotation { - 어노테이션 속성 : 기본값 설정 기능
String name(); // a requried attribute
int count() default 0; // an optioanl attribute with a default value of 0
// 메서드가 아니라 필드라고 생각하면 됨
// 메타 어노테이션
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetnetionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation { // 어노테이션 정의
// 어노테이션 속성 : 기본값 설정 기능
String name(); // a requried attribute
int count() default 0; // an optioanl attribute with a default value of 0
}
// 사용자 정의 annoatation 사용
@MyAnnotation(name = "설정 파일", count=10)
public void testString() {
...
}
- Meta annotation
- @Retentation : 유지 기간
- RetentionPolicy.SOURCE : 소스 파일(.java)에만 존재하고 클래스 파일 존재 X → 컴파일 사용 X
- RetentionPolicy.CLASS : 클래스 파일(.class)에만 존재, 실행 시 사용 불가능(default) → 실행 사용 X
- RetentionPolicy.RUNTIME : 클래스 파일에 존재하고, 실행 시점에도 존재
- @Target : 적용 대상
- ElementType.ANNOTATION_TYPE : 어노테이션
- ElementType.CONSTRUCTOR : 생성자
- ElementType.FIELD : 필드(멤버 변수, ENUM 상수)
- ElementType.LOCAL_VARIABLE : 지역 변수
- ElementType.METHOD : 메서드
- ElementType.PACKAGE : 패키지
- ElementType.PARAMETER : 매개변수
- ElementType.TYPE : 타입(클래스, 인터페이스, enum)
- ElementType.TYPE_PARAMETER : 타입 매개변수
- @Documented : javadoc 포함
- @Retentation : 유지 기간
reflection & class 클래스
- reflection 클래스
- class 클래스를 통해 가져온 메타 정보를 저장
- 가져온 클래스 메타 정보를 통해서 클래스의 메서드 실행 가능
- 코드 예제
- 깃허브 : https://github.com/kung036/java_task/tree/test/src/practice/day20240520/meta
- 요구사항
- Annotation 'Repeat' 이 개수만큼 method 실행
- 구현
- Repeat annotation 만들기
- MyClass 메서드에 사용자 정의 annotation Repeat을 붙여서 동작 확인하기
Gradle
- 구현 후처리
- 코드 실행 검증
- 외부 라이브러리 종속성 관리
- java 코드 패키징(jar)
- Build : java application을 실행할 수 있는 상태
- java build = java compile + 기타 작업
- 기타 작업 : java assembly, java test, java depedency management
- Build tool : 매번 정형화된 빌드 작업 자동화 시스템
- 정형화된 빌드 작업
- 컴파일 과정
- 코드 의존성 관리
- 코드 테스트 및 리포트
- 문서화 작업
- 압축화 파일(.jar) 생성
- 배포과정 진행
- 종류
- Make : 원조 빌드툴
- Ant : 원조 빌드툴, 최초의 java 특화툴
- Maven : 빌드툴 혁명
- xml 사용 및 pom 개념 제시
- Gradle : 빌드툴의 뜨는 태양
- 스크립트 언어(= groovy) 사용
- 정형화된 빌드 작업
- Maven VS Gradle
- maven 코드
- pom.xml 파일
- 코드 예시 깃허브 : https://github.com/kung036/java_task/tree/test/MyMaven
- gradle 코드
- build.gradle 파일
- 코드 예시 깃허브 : https://github.com/kung036/java_task/tree/test/MyGradle
- maven 코드
Gradle
- 장점
- 간결한 스크립트
- 빠른 빌드 속도 : Maven보다 5배 빠른 속도
- IntelliJ와 친화력이 좋음
- 파악해야하는 핵심
- java gradle 프로젝트 구조
- project : 최상위 작업 단위
- module : 자바 코드와 파일을 묶는 작업 단위
- ./gradle : gradle 명령 파일 모음(=wrapper)
- ./src : java 코드 및 파일들
- org.example : java groupt 패키지
- /main 패키지 : java 실행 코드, 파일 패키지
- Main.java : java 실행 클래스
- java 패키지 : java 코드
- resources : java 코드 이외 코드에 사용되는 파일들
- /test 패키지 : java 테스트 코드, 파일 패키지
- java gradle tasks
- 종류
- 단일 Task
- 통합 Task
- 정형화된 빌드 작업과 task
- java 컴파일 과정(단일) - other → complieJava
- java 문서화 작업(통합) - documentation → javadoc
- java 코드 테스트 및 리포트 - verifiction → check
- java 압축화 파일(.jar) 생성 - build → jar
- 빌드 - build → build
- CLI 하는 법
- ./src/gradlew에서 명령어를 통해서 task 수행 가능
- 종류
- java gradle DSL
- plugins : gradle task 같은 Gradle 추가 기능 관리
- groupt, version : Java 모듈 메타 정보
- repositories : java 외부 라이브러리 저장소
- dependencies : 사용할 외부 Java 라이브러리 관리
- External Libraries에 외부 라이브러리 저장됨
- Maven repository : java 라이브러리
- https://mavenrepository.com
- License 중요
- test : Task Custom 설정 : gradle Task Custom 설정
- java gradle 프로젝트 구조
!! 외부 라이브러리 서치해서 활용해보자 !!
- 프로젝트 개선
- 기존 코드 정상 실행 확인
- 비효율적인 상황 발생
- 해결책 구글링
- 라이브러리 종속성 추가
- 실제 코드에 라이브러리 사용해서 반영
- 정상 코드 빌드 동작 확인
'슈퍼코딩 > 주특기(JAVA)' 카테고리의 다른 글
2024.05.22(수) 슈퍼코딩 신입연수원 8주차 Day 3 후기 - SQL 기초 문법 (0) | 2024.05.22 |
---|---|
2024.05.21(화) 슈퍼코딩 신입연수원 8주차 Day 2 후기 - RDBMS (0) | 2024.05.21 |
슈퍼코딩 신입연수원 7주차 후기 (0) | 2024.05.18 |
2024.05.17(금) 슈퍼코딩 신입연수원 7주차 Day 5 후기 - 디자인 패턴 (0) | 2024.05.17 |
2024.05.16(목) 슈퍼코딩 신입연수원 7주차 Day 4 후기 - 신입 개발자 역량, 메소드 레퍼런스, 멀티 쓰레딩 프로그래밍 (0) | 2024.05.16 |