전체 글
-
[Effective Java 공부하기] 6. 불필요한 객체 생성을 피하라Java 2022. 4. 1. 01:39
불필요한 객체 생성을 피하라 자바는 기본적으로 사용하지 않는 불필요한 객체를 청소해주는 GC(Garbage Collectotion) 기능이 존재한다만 소스적으로 불변의 객체를 반복적으로 생성하는 것을 최대한 지양해야 한다. // Boolean 인스턴스를 생성 Boolean b1 = new Boolean(true); // Boolean 팩터리 메서드를 사용(만들어진 인스턴스를 참조) Boolean b2 = Boolean.valueOf(true);위와 같은 불변 객체라면 new Boolean(true) 생성자를 통해 불필요한 객체의 인스턴스를 반복 생성하는 것보다 팩터리 메서드를 사용하여 이미 만들어진 객체의 인스턴스를 재활용하는 것이 더 현명한 선택이 될 수 있을 것 같다. 실제로 자바9 이후로 new B..
-
[Effective Java 공부하기] 4. 인스턴스화를 막으려거든 private 생성자를 사용하라Java 2022. 3. 31. 00:46
인스턴스화를 막으려거든 private 생성자를 사용하라 static method와 static field가 존재하는 유틸리티 클래스를 따로 만들어서 사용하곤 한다. 이런 유틸리티 클래스는 인스턴스를 만들어서 사용하려는 목적이 아니기 때문에 인스턴스화를 막아주어야 한다. 클래스는 생성자를 따로 명시해주지 않았다면 컴파일러에 의하여 접근제어자 public을 지닌 기본 생성자가 추가된다. 기본 생성자에 의하여 외부에서 클래스의 인스턴스화 시킬 수 있으니 인스턴스를 막으려거든 기본 생성자를 private 접근제어자로 변경하자. public class JsonUtils { // 외부에서 인스턴스화 되는것을 막는다. private JsonUtils() { } }
-
[Effective Java 공부하기] 2. 생성자에 매개변수가 많다면 빌더를 고려하라Java 2022. 3. 29. 00:12
생성자에 매갭변수가 많다면 빌더를 고려하라 클래스의 인스턴스를 생성하기 위해서 생성자를 이용하는 것이 일반적이다. Student student = new Student(1L, "장규민", 10); 생성자의 매개변수가 예시처럼 간단할 때는 생성자를 통한 인스턴스 생성 방법은 좋은 선택이 될 수 있지만 10개가 넘는 생성자 매개변수가 존재하고 매개변수의 타입마저 연달아 늘어서 있다면 코드를 작성할 때 휴먼에러로 이러질 수 있다. 특히, 매개변수의 타입이 같아서 개발자가 실수한다면 컴파일 시, 오류를 잡아내지 못하기에 한참동안 방황할 수도 있을 것 같다. // 매개변수가 많아져 눈에 들어오지 않는다. Student student = new Student(1L, "장규민", 10, 179, 71, 100, 23..
-
[JAVA] 정규표현식 정리하기();Java 2021. 6. 29. 22:36
정규표현식(Regular Expression) - 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 형식언어 기호 설명 예시패턴 매칭문자열 ^ 문자열 행의 시작 - $ 문자열 행의 끝 - . 임의의 문자 한 개를 의미(줄바꿈 제외) [ab]. "ac", "ad", "bb", "bz", etc.. * 앞 표현식의 문자가 없거나 한개 이상을 의미 (car)[0-9]* "car", "car051", "car421", etc... + 앞 표현식의 문자가 한개 이상을 의미 (car)[0-9]* "car0", "car111", etc... ? 앞 표현식의 문자가 없거나 한개를 의미 (car)[0-9]? "car", "car1", "car4" [ ] 대괄호는 검증문자 1개를 의미 a, b, c, d 중 문자 ..
-
[Java] 제네릭 타입 정리하기();Java 2021. 4. 25. 23:44
API document을 보다가 제네릭 타입 표현이 많아 이번 기회에 다시 한번 제네릭을 정리하기로 결심하고 오랜만에 자바 책을 다시 펼치게 되었다는... 제네릭은 Java 5에서 처음 등장하였으며,클래스와 인터페이스, 메소드를 정의할 때, 타입을 파라미터로 사용하고, 파라미터는 코드 작성 시 구체적인 타입으로 대체되어 동적인 코드를 생성하도록 도와주는 기술이다. 제네릭 클래스, 제네릭 인터페이스 텍스트로 보면 곧바로 와닿지 않는다. 바로 코드를 보자. @Getter public class Height { private T t; } 위 클래스는 간단한 Height 클래스이며, 클래스명 뒤에 제네릭 클래스를 의미하는 부호가 붙어있다. 해당하는 부호 사이에 타입 파라미터를 나타내는 T 문자열이 있으며 일반적..
-
[HTTP] HTTP 응답 상태코드 정리하기();HTTP 2021. 4. 19. 00:02
HTTP 응답의 상태코드 정리를 간단하게 해보자 모든 HTTP 요청에는 HTTP 응답이 있다. 그 응답 속에는 항상 상태코드(Status Code)가 있는데, 이를 통해 요청을 준 클라이언트에게 서버단의 처리 결과를 알려줄 수 있다. 개발자로서 항상 200번 대의 응답을 만나는 것은 아니니 400, 500 번대 응답도 알아두는게 도움이 될 것 같다. HTTP 상태코드 100 ~ 1xx 100번 대의 상태코드는 정보성 상태를 의미하며 HTTP/1.1에서 첫 도입되었다. 구간 상태코드 사유구절 설명 100 ~ 1xx 100 Continue 클라이언트의 요청의 일부가 받아들여졌으며, 클라이언트는 계속해서 요청의 나머지를 계속 이어서 보내야함을 의미하는 상태 101 Switching Protocols 서버가 프..
-
[git] 커맨드라인을 통한 깃(git) 명령어 정리Git 2020. 4. 10. 02:34
해당 포스팅은 생활코딩의 egoing님 Git 강의를 듣고 정리한 자료이다. Git의 핵심 목적 버전관리 백업 협업 1. 버전관리 파일이 변경되었을때 변경사항들을 버전으로 만들어서 관리하는것. init 현재 디렉토리를 git을 통해 버전관리를 요청한다. 버전이 저장되는 저장소(repository)를 생성하는 명령어 git init status git을 통해 관리하고 있는 디렉토리의 상태를 묻는 명령어 git status add working-directory의 수정사항을 버전으로 만들기 위해 staging-area로 올리는 명령어 // [파일이름]을 staging-area 올린다. git add [파일이름] // 모든 수정된 file을 staging-area에 올린다. git add . commit st..
-
[JPA] 페치조인(fetch join)이란?JPA 2020. 4. 3. 04:09
페치조인(fetch join) 기존 SQL의 조인이 아님 JPQL의 성능 튜닝을 위해 제공되는 조인 연관된 엔티티 or 컬렉션을 SQL 한번에 함께 조회하는 기능 간단한 예제를 보자. @Entity @Getter public class Member { @Id @GeneratedValue private Long id; private String username; private int age; // 양방향 연관 필드 // 연관관계 주인 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; } @Entity @Getter public class Team { @Id @GeneratedValue private Long..