Language/JAVA

Language/JAVA

[Java] @NotBlank, @NotNull, @NotEmpty 차이

개발 중 RequestDto를 생성할 때, 값 검증을 위해 @NotBlank, @NotNull, @NotEmpty와 같은 어노테이션을 사용하는 경우가 많다. 해당 어노테이션은 Spring Validation 라이브러리에 포함되어있으며, 아래 코드를 build.gralde에 넣어 추가할 수 있다. build.gralde implementation 'org.springframework.boot:spring-boot-starter-validation' UserRequestDto.java public class UserLoginRequestDto { @Email(message = "이메일 형식에 맞지 않습니다") @NotBlank private String email; /*생략*/ } 위는 DTO에 @NotBl..

Language/JAVA

[Java] - Comparable 인터페이스란?

자바 Comparable Interface 자바로 개발을 하다보면 Domain 클래스 구현을 위해 primitive 타입 자료형을 감싸는 경우가 있다. primitive 타입이 다음과 같이 Domain클래스로 Wrapping될 경우 외부에서 따로 처리해주어야 하던 값 검증 로직을 클래스 내부에 작성하여 생성자를 통해 객체 생성 시에 값 검증까지 처리할 수 있다는 장점이 생긴다. public class User { private int age; private String name; public User(int age, String name){ this.age = age; this.name = name; } } User user1 = new User(10,'sj'); User user2 = new User(..

Language/JAVA

[JAVA] Map, Stream - Boolean값이 true인 value의 key 반환받기

😲 자바 Boolean값이 true인 value의 key 반환받기 코드를 짜다보면 boolean값을 여러 개 가진 객체에서 true값을 가진 변수만 추출해야 하는 경우가 종종 있다. 나는 이번에 참가한 서울시 IoT 해커톤에서 위와 같은 기능을 구현해야 했었다. 하지만 이를 효율적인 코드로 구현하는 방법을 몰랐기에 if문을 boolean변수의 수만큼 사용하여 true인 데이터의 변수명을 List에 저장하도록 구현했다. 문제의 DTO @Getter @Setter public class AmenityRequestDto { private boolean elevator; // 엘리베이터 private boolean wideExit; //넓은 출입구 private boolean ramp; // 경사로 privat..

Language/JAVA

[JAVA] ObjectMapper를 통한 손쉬운 객체 형식 변환

서울시 IoT 해커톤 수상작인 B-Map을 리팩터링 하던 도중 비효율적인 코드를 수정하는 과정에서 일반 Dto객체를 Map형식으로 변환해야할 일이 생겼고 바로 이 때! ObjectMapper를 사용했다. ObjectMapper의 convertValue() 메서드를 사용하면 객체를 다른 형식의 객체로 변환할 수 있다. 기억해두면 유용할 것 같아 기록을 남겨본다. toMap() 사용 위와 같이 일반 Dto객체를 Map 객체로 변환하기 위해 ObjectMapper를 사용하였다. AmenityRequestDto - toMap() public Map toMap(){ ObjectMapper objectMapper = new ObjectMapper(); HashMap result = objectMapper.conve..

Language/JAVA

[Java] 여러 데이터를 저장하는 법 - Array, List, Map

자바 :: 여러 데이터를 저장하는 법 - Array, List, Map :: 여러 데이터를 저장할 수 있도록 해주는 기능은 자바에 대표적으로 3가지가 있다. 이번 시간에는 그 3가지의 사용법에 대해 소개하는 시간을 갖도록 하겠다. 1. Array (배열) 배열은 같은 종류의 데이터를 하나의 공간에 저장할 수 있도록 해주는 기능이다. 배열의 크기는 처음 선언 시에 입력하게 되며 .length로 배열의 크기를 확인할 수 있다. 인덱스는 0번부터 시작이다. ex) new int[10] -> 인덱스 0~9번 :: 선언 :: 위와 같이 자료형[] 로 선언하거나 배열 생성 시에 값을 초기화하면서 생성할 수 있다. :: 초기화 :: 배열을 초기화할 때는 값을 삽입할 배열의 인덱스를 선택 후 삽입이 가능하다 ex) i..

Language/JAVA

[Java] [객체지향] SOLID 원칙 - 좋은 객체 지향 설계의 5가지 원칙

좋은 객체지향을 하기 위한 5가지 원칙이 있다. ' SRP / OCP / LSP / ISP / DIP ' 이렇게 5가지가 있는데 앞자만 따서 SOLID(솔리드) 원칙이라고 부른다. 지금부터 이 원칙에 대해 하나하나 알아보자. 솔리드 원칙 1. SRP 단일 책임 원칙 하나의 클래스는 하나의 역할만 갖는다. 2. OCP 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 다형성을 사용해보자! 클라이언트가 MemberService 구현 클래스를 직접 선택 MemberRepository m = new MemoryMemberRepository(); //기존 코드 MemberRepository m = new JpaMemberRepository(); //변경 코드 구현 객체를 변경하려..

Language/JAVA

[JAVA] 자바 JVM, JRE, JDK 차이

Java 프로그램 작성법 1. IDE를 통해 *.java 파일 작성 2. javac.exe를 사용해 *.java 파일 컴파일하여 *.class 생성 3. java.exe를 사용해 컴파일된 *.class 파일 실행 JVM JVM은 자바 가상머신(Java Virtual Machine)의 약자이다. JVM은 자바 소스코드로부터 만들어지는 자바 바이너리 파일(.class)을 실행할 수 있다. 또한 JVM은 플랫폼에 의존적이다. 즉 리눅스의 JVM과 윈도우즈의 JVM은 다르다. 단, 컴파일된 바이너리 코드는 어떤 JVM에서도 동작시킬 수 있다. JVM은 다음과 같은 역할을 한다. 바이너리 코드(이진 코드)를 읽는다. 바이너리 코드(이진 코드)를 검증한다. 바이너리 코드(이진 코드)를 실행한다. 실행환경(Runti..

Language/JAVA

[Java] 윈도우 설정으로 CSV 파일 ,(콤마) 말고 다른 구분자로 변경하기!

오늘 포스팅할 내용은 프로젝트 중에 발견한 애로사항과 그 해결 과정을 공유해서 같은 문제를 겪는 사람들에게 도움이 되고자 하는 마음에 올리는 포스팅이다! 바로 본론으로 들어가겠다. CSV 파일은 , (콤마)로 컬럼들을 구분하도록 되어있는 파일이다. 하지만 내용에 ',' 이 들어있으면 파싱 시 맞지 않는 컬럼에 데이터가 이상하게 쪼개져 들어가게 된다. 나는 이번 프로젝트 진행 중, CSV 파일의 모든 데이터를 DB에 넣는 작업을 거쳐야 했다. "CSV는 당연히 콤마를 기준으로 데이터들이 분류되어있는 파일이니까 split(",") 를 하면 row에서 column들이 알아서 분리되겠지?" 라는 생각에 로직을 이대로 작성했고 문제는 여기서 발생했다. 컬럼의 내용 중에 ,(콤마) 를 포함한 데이터가 많이 있었고,..

PgmJUN
'Language/JAVA' 카테고리의 글 목록