Java
-
[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 문자열이 있으며 일반적..
-
[Java] Collection 프레임워크(List, Set, Map)Java 2020. 3. 4. 02:51
java.util 패키지는 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 Collection과 관련된 인터페이스와 클래스를 제공한다. Collection 프레임워크 주요 인터페이스 List Set Map List 인터페이스 - List 인터페이스를 구현한 클래스 : ArrayList, Vector, LinkedList - 순서를 유지한 상태로 저장하고 객체 중복 저장을 허용한다. - 객체를 인덱스로 관리하기 때문에 객체가 추가되면 자동 인덱스가 부여되고 해당 인덱스를 통해 객체를 검색, 삭제할 수 있는 기능을 제공한다. - 객체 자체를 저장하는 것이 아니라 객체의 주소 값을 참조하는 것. List 인터페이스의 공통 메소드 method 기능 boolean add(E e) 객체를 리스트 맨 마지막에 추..
-
[java] 자바를 사용해서 메일 보내기 (feat. SMTP Protocol)Java 2020. 2. 7. 03:00
SMTP 프로토콜과 자바를 사용해서 메일전송을 해보려고 한다. 현재 운영 중인 블로그에 추가할 것이당 :) 간단하게 SMTP 메일 전송에 대한 개념을 이해하자. [happy@naver.com]가 [funny@gmail.com] 에게 메일을 보냈다! ->happy의 메일은 naver 메일서버를 거치고 gmail 메일서버를 거친 후 funny에게 전달된다. SMTP Protocol(Simple Mail Transfer Protocol) - 전자 메일 전송을 위한 표준 프로토콜. - 클라이언트트가 서버에 이메일을 전달하는데 사용된다. POP3 Protocol(Post Office Protocol) - 서버에서 이메일을 수신할 수 있도록 한다. - 서버의 이메일은 삭제됨. IMAY Protocol(Interne..