Java
-
ModelMapperJava 2021. 3. 4. 17:20
ModelMapper 다른 코드에서 ModelMapper 라는것을 보았는데 뭔지 궁금해서 찾아보았다. 왜 DTO 를 따로 만들어서 사용하는가 ? Entity 클래스를 생성할때 자바빈 규약을 생각하면서 getter/setter 를 생성하는 경우가 있는데 이렇게 되면 해당 클래스의 인스턴스 값들이 언제 어디서 변해야하는지 구분할수가 없어, 차후 기능 변경시 복잡해진다. 절대로 테이블과 매핑되는 Entity 클래스를 Reqeust/ Response 클래스로 사용해서는 안된다. Entity 클래스가 변경되면 여러 클래스에 영향을 끼치게 되는 반면 Request, Response 용 DTO 는 View 를 위한 클래스라 자주 변경이 필요하다. View Layer 와 DB Layer 를 철저하게 역할 분리하는게 좋..
-
@AuthenticationPrincipalJava 2021. 3. 1. 19:00
Principal 로그인한 사용자의 정보를 파라미터로 받고 싶을때 Principal 아래와 같이 객체로 받아서 사용할 수 있다. Principal 객체는 java.security 패키지에 속해있는 인터페이스이며 getName() 을 통하여 name 정보를 참조할 수 있다. @GetMapping() public String index (Model model, Principal principal) { if (principal == null) { model.addAtrribute("msg", "Hello"); } else { model.addAtrribute("msg", "Hello" + principal.getName()); } return "index"; } @AuthenticationPrincipal 다..
-
@InitBinderJava 2021. 2. 26. 17:30
@InitBinder Spring Validator 사용 시 @Valid 애노테이션으로 검증이 필요한 객체를 가져오기 전에 수행할 메소드를 지정해주는 애노테이션. - Binding ? 파라미터의 수집 @InitBinder public void initBinder(WebDataBinder webDataBinder){ // 무시할 필드명 명시 webDataBinder.setDisallowedFields("id"); // 허용할 필드명 명시 webDataBinder.setAllowedFields("id"); // 특정 Formatter 등록 webDataBinder.addCustomFormatter(); // 특정 CustomEditor 등록 webDataBinder.registerCustomEditor(Da..
-
java validationJava 2021. 2. 26. 16:17
Validation 애플리케이션 개발 시, 데이터 유효성을 검사하는 것은 애플리케이션 전체에서 발생한다. 입력값 검증 실패에 대해 원인을 쉽게 파악하고 이해하기 쉽게 적절한 API 응답을 해야한다. 목표를 달성하기 위해 Java의 데이터 유효성 검사 표준 기술인 Bean Validation을 사용한다. 문제점 애플리케이션 전체에 분산되어 있음 코드 중복이 심하다. 비즈니스 로직에 섞여있어 검사 로직 추적이 어렵고 복잡해진다. 해결법 Java 에서는 Bean Validation 이라는 데이터 유효성 검사 프레임워크를 제공한다. Bean Validation은 문제들을 해결하기 위해 다양한 제약을 도메인 모델에 애노테이션으로 정의할 수 있게한다. 이 제약을 유효성 검사가 필요한 객체에 직접 정의하는 방법으로 ..
-
13. I/OJava 2021. 2. 24. 20:17
목표 자바의 Input과 Ontput에 대해 학습하세요. 학습할 것 (필수) 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O InputStream 과 OutputStream Byte 와 Character 스트림 표준 스트림 (System.in, System.out, System.err) 파일 읽고 쓰기 I/O Input / Output 의 준말로, 프로그램 외부로 부터의 입력과 출력을 의미한다. Java 에서는 java.io 패키지에 있다. New I/O Java 1.4 부터 추가된 API 로 Non-blocking 처리가 가능하며, Stream 이 아닌 Channel 을 사용한다. java.nio 패키지에 있다. I/O vs New I/O Stream 단방향으로..
-
12. 애노테이션Java 2021. 2. 6. 12:35
목표 자바의 애노테이션에 대해 학습하세요. 학습할 것 (필수) 애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 Annotation ? Java 1.5부터 등장한 기능으로 인터페이스를 기반으로 한 문법이다. 사전적 의미로는 주석으로 주석처럼 클래스, 메소드, 필드등에 특별한 의미를 부여하거나 기능을 주입할 수 있다. 즉, 프로그램에게 추가적인 정보를 제공해주는 메타 데이터(데이터를 위한 데이터)라고 볼 수 있다. 애노테이션이 왜 필요했는가 ? 기존의 자바 웹 애플리케이션에서 구성과 설정값을 XML 설정 파일을 통해서 명시하고 관리하였다. 이는 변경될 수 있는 데이터들을 코드가 아닌 외부 파일로 분리함으로써 컴파일 없이 변경사항을 적용하기 위함이었다. 근데..
-
11. EnumJava 2021. 1. 29. 17:13
목표 자바의 열거형에 대해 학습하세요. 학습할 것 (필수) enum 정의하는 방법 enum이 제공하는 메소드 java.lang.Enum EnumSet enum 정의하는 방법 enum Position { TOP, JUG, MID, ADC, SUP; } - enum 키워드 사용 - enum은 엄연한 클래스이다. - 모두 상수이기 때문에 대문자로 표기할 것 - 0부터 시작되는 정수값이 연속적으로 부여됨 - 생성자의 접근제어자는 private 이기에 외부에서 생성자 상수 추가 불가능 - 정의된 상수 하나당 실제로 하나의 인스턴스 생성 ( private static final ) - 열거형의 멤버중 하나가 호출 되면 열거된 모든 상수의 객체가 생성됨 - 열거형 상수의 비교에는 '==' , 'compareTo()'..
-
10. 멀티쓰레드 프로그래밍Java 2021. 1. 27. 14:38
목표 자바의 멀티쓰레드 프로그래밍에 대해 학습하세요. 학습할 것 (필수) Thread 클래스와 Runnable 인터페이스 스레드의 상태 스레드의 우선순위 Main 스레드 동기화 데드락 Thread 클래스와 Runnable 인터페이스 Java 에서 쓰레드를 생성하는 방법에는 Thread 클래스 상속받기, Runnable 인터페이스 구현하기 2가지 방법이 있다. Thread 클래스는 Runnable 인터페이스를 구현한 클래스이므로 그냥 어떤 것을 적용하느냐의 차이이다. 어떤 것을 사용할까 ? - 다중 상속을 지원하지 않으므로 확장할 필요가 있을 경우에는 Runnable 인터페이스를 구현, 그렇지 않은 경우는 Thread 클래스를 사용한다. Thread 는 순서대로 동작하는가 ? - 순서대로 실행되지 않는다...