개발이 좋아서/Java가 좋아서

    애노테이션 - 애노테이션 검증기

    - 애노테이션package annotation.validator;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface NotEmpty { String message() default "값이 비어있습니다.";}package annotation.validator;import java.lang.annotation.ElementType;impo..

    애노테이션 - 애노테이션과 상속

    - 클래스 상속package annotation.basic.inherited;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;@Inherited // 클래스 상속시 자식도 애노테이션 적용@Retention(RetentionPolicy.RUNTIME)public @interface InheritedAnnotation {}package annotation.basic.inherited;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;@Retentio..

    애노테이션 - 메타 애노테이션

    - 애노테이션을 정의하는데 사용하는 특별한 애노테이션을 메타 애노테이션이라 한다.- @RetentionRetentionPolicy.SOURCERetentionPolicy.CLASSRetentionPolicy.RUNTIME- @Target- @Documented- @Inherited  @Retention - 애노테이션의 생존 기간을 지정한다. - RetentionPolicy.SOURCE : 소스 코드에만 남아있다. 컴파일 시점에 제거된다.- RetentionPolicy.CLASS : 컴파일 후 class 파일까지는 남아있지만 자바 실행 시점에 제거된다. (기본 값)- RetentionPolicy.RUNTIME : 자바 실행 중에도 남아있다. 대부분 이 설정을 사용한다.  @Target- 애노테이션을 적용할..

    애노테이션 - 애노테이션 정의

    데이터 타입기본 타입 (int, float, boolean 등)StringClass(메타데이터) 또는 인터페이스enum다른 애노테이션 타입위의 타입들의 배열일반적인 클래스를 사용할 수 없다. (ex) Member, User)default 값요소에 default 값을 지정할 수 있다.ex) String value() default "기본 값을 적용합니다.";요소 이름메서드 형태로 정의된다.괄호()를 포함하되 매개변수는 없어야 한다.반환 값void를 반환 타입으로 사용할 수 없다.예외예외를 선언할 수 없다.package annotation.basic;import util.MyLogger;import java.lang.annotation.ElementType;import java.lang.annotation...

    리플렉션 - 생성자 탐색과 객체 생성

    package reflection;import java.lang.reflect.Constructor;public class ConstructV1 { public static void main(String[] args) throws ClassNotFoundException { Class aClass = Class.forName("reflection.data.BasicData"); System.out.println("===== constructors() ====="); Constructor[] constructors = aClass.getConstructors(); for (Constructor constructor : constructors) { ..

    리플렉션 - 활용 예제

    - 필드 값이 null 이 되면 안된다는 가정을 하자package reflection.data;public class Team { private String id; private String name; public Team() { } public Team(String id, String name) { this.id = id; this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; }..

    리플렉션 - 필드 탐색과 값 변경

    package reflection.data;public class User { private String id; private String name; private Integer age; public User() { } public User(String id, String name, Integer age) { this.id = id; this.name = name; this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getNa..

    리플렉션 - 메서드 탐색과 동적 호출

    package reflection.data;public class BasicData { public String publicField; private int privateField; public BasicData() { System.out.println("BasicData.BasicData"); } private BasicData(String data) { System.out.println("BasicData.BasicData: " + data); } public void call() { System.out.println("BasicData.call"); } public String hello(String str) { ..

    리플렉션 - 클래스와 메타데이터

    package reflection.data;public class BasicData { public String publicField; private int privateField; public BasicData() { System.out.println("BasicData.BasicData"); } private BasicData(String data) { System.out.println("BasicData.BasicData: " + data); } public void call() { System.out.println("BasicData.call"); } public String hello(String str) { ..

    HTTP 기본 이론(간단 요약)

    클라이언트 서버 구조Request Response 구조클라이언트는 서버에 요청을 보내고, 응답을 대기서버가 요청에 대한 결과를 만들어서 응답HTTP 메시지에 모든 것을 전송HTML, TEXTIMAGE, 음성, 영상, 파일JSON, XML (API)거의 모든 형태의 데이터 전송 가능서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용HTTP 메서드 종류- GET리소스 조회서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달메시지 바디는 사용하지 않음 (메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음)- POST요청 데이터 처리메시지 바디를 통해 서버로 요청 데이터 전달서버는 요청 데이터를 처리주로 전달된 데이터로 신규 리소스 등..