분류 전체보기

· Java
회원가입 시 사용자가 입력한 닉네임 뒤에 #0000 과 같은 Suffix를 붙여야한다는 요구사항이 있다. 뒤에 네 자리 숫자는 난수를 생성하기 위해 Random 객체를 사용했다. public class IdentifierProvider { private static final String NICKNAME_IDENTIFIER_PREFIX = "#"; private static final int DIGIT = 4; private static final Random random = new Random(); public static String create(){ final StringBuilder identifier = new StringBuilder(NICKNAME_IDENT..
· 자료구조
ArrayList는 내부적으로 가변크기 배열을 이용한다. 하지만 배열 크기 자체가 동적으로 설정되는 것은 아니라 내부에서 새로운 크기의 배열을 생성하고 복사한다. 먼저 배열을 알아보자배열은 자료구조에서 가장 기초적이면서도 핵심적인 위치에 있다. 인덱스를 통한 배열 접근은 O(1)로 한 번의 연산으로 데이터에 접근이 가능하다.int[] arr = new arr[5];arr[0] = 1;System.print.out(arr[0]);  배열은 어떻게 시간 복잡도가 O(1)이 될 수 있을까?배열은 메모리에 연속적으로 할당된다.  연속적인 메모리 할당이 주는 이점은 배열의 시작주소와 자료형을 알 수 있다면 (시작주소 + 자료형 크기 * 인덱스) 라는 한 번의 연산으로 데이터의 위치를 알아 낼 수 있다. 자료형은 ..
· Java
들어가기프로젝트 팀원분께서 DTO클래스에 Record를 사용해보는게 어떻겠냐고 하셔서 바로 Record 클래스에대해 알아보기 시작했고, 과연 데이터를 실어 나르는데 적합한지 알아봤다. Record ClassJDK 14에서 미리보기형태로 등장한 Record 클래스는 JDK 16에 정식 스펙으로 등록됐다. 1. Final Class로 상속이 불가능하다.2. 불변객체이다 -> 모든 필드가 private final로 정의된다.3. 중복되는 코드들[Getter, Setter, HashCode, Equals 등] 컴파일 타임에 자동으로 생성된다. 한 마디로 코드가 깔끔해진다.public record UserSignUpRequest( @Size(min = 5, message = "아이디는 5자 이상이여야..
· Java
들어가기 테스트하기 쉽다고 좋은 함수, 좋은 설계는 아니지만 좋은 함수, 좋은 설계는 테스트하기 쉽다. 여기저기서 많이 들어볼 수 있는 말이다. 아직 테스트 코드를 많이 작성해보지 못했고 공부하는 과정이라 저 말이 잘 와닿지는 않는다. 아주 조금씩 이 말을 깨달아가고 있고 그 과정을 남겨보려 한다. 어려운 테스트, 좋지 못한 설계 진행 중인 프로젝트에서 회원의 관심분야를 등록, 수정, 삭제할 요구사항이 생겼다. 처음엔 아래와 같이 Service 레이어를 구현했다. @Transactional public void saveInterests(InterestsRequest interestsRequest, UserDetails userdetails) { User user = userRepository.findBy..
· Java
아래 코드를 한 번 살펴보자. Integer c = Integer.valueOf(127); Integer d = Integer.valueOf(127); System.out.println("c.hashCode() = " + c.hashCode()); System.out.println("d.hashCode() = " + d.hashCode()); System.out.println("System.identityHashCode(c) = " + System.identityHashCode(c)); System.out.println("System.identityHashCode(d) = " + System.identityHashCode(d)); System.out.println("(c==d) = " + (c==d));..
· Spring
들어가기 우아한 객체지향을 듣고 느낀점만 많아서는 안되겠다는 생각이 들어 진행중인 프로젝트의 도메인 객체와 서비스 레이어를 유심히 살펴봤습니다. 도메인이 의존해서는 안될 코드를 하나 발견했고 이를 정리해보려 합니다. 도메인이 암호화를 책임지는 코드 아래는 회원을 관리하는 엔티티다. 도메인 객체에 passwordEncode 라는 메서드로 비밀번호를 암호화 하고있는데 처음엔 자신의 상태(password)는 자신이 변화시켜야한다고 생각했기에 도메인 내부에서 처리하고 있었습니다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class User { @Id @GeneratedValue(strategy = GenerationTyp..
· Java
들어가기 계층형 아키텍처에대해서 검색을 해보던 중에 이동욱 개발자님의 포스팅을 보게 됐다. 계층형 아키텍처 학교 다닐때 잠깐 JAVA 관련 수업을 들은적이 있다. 그때 수업 내용은 넷빈즈(Netbeans) IDE를 통해 JAVA로 윈도우 애플리케이션을 만드는 것이였다. 간단한 시간표 관리 프로그램을 만드는 과제는 얼 jojoldu.tistory.com 전체 글을 절반 쯤 읽던 중 Rich Domain Model에대한 이야기가 나왔고, 사실 처음 들어봤다... 그래서 글을 읽다 말고 1시간 40분 짜리 동영상을 시청하게됐다. 왜 이제서야 봤는지 후회가 될 정도였고 이 내용을 잘 정리해두려한다. eternity-oop - Overview eternity-oop has 4 repositories availab..
· Spring
스프링을 사용하다 보면 @Value를 통해. yml 또는. properties에 정의된 속성을 가져오곤 합니다. 현재 진행중인 프로젝트에서도 @Value를 통해 jwt 설정을 가져와 사용 중입니다. public class JwtService { private static final String USER_UNIQUE_CLAIM = "user_unique_id"; private static final String ACCESS_TOKEN_SUBJECT = "AccessToken"; private static final String REFRESH_TOKEN_SUBJECT = "RefreshToken"; private static final String TOKEN_TYPE = "Bearer "; @Value("$..
H@eCh@n
'분류 전체보기' 카테고리의 글 목록 (4 Page)