일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- ora-01722
- ORA-00922
- oracle 18c
- 무료 오라클 데이터베이스
- 무료 오라클 설치
- Oracle 18c HR
- Oracle 사용자명
- Oracle 테이블 대소문자
- Oracle 초기 사용자
- 오라클 캐릭터셋 변경
- 오라클 캐릭터셋 확인
- Oracle 사용자명 입력
- oracle
- 비전공자를 위한 데이터베이스 입문
- Oracle 테이블 띄어쓰기
- Oracle 18c 설치
- Oracle Express Edition
- Oracle 18c HR schema
- Orace 18c
- 서평단
- 윈도우 Oracle
- ORA-12899
- 오라클 캐릭터셋 조회
- Oracle 윈도우 설치
- Today
- Total
목록Programming/JAVA (25)
The Nirsa Way

오토박싱(auto-boxing)과 언박싱(unboxing)자바는 기본형(int, long, double, ...)과 래퍼 클래스(Integer, Long, Double, ...)를 구분합니다. 기본형과 래퍼 클래스는 오토박싱과 언박싱을 통해 자동으로 이루어지지만 때로는 성능 저하로 이루어질 수 있습니다.우선 아래의 코드는 int 타입(10)을 Integer로 자동으로 변환시켜주는 오토 박싱의 예시입니다. 자바에서 숫자는 기본적으로 int 이므로 숫자 10은 기본형, 데이터 타입은 Integer인 래퍼클래스 이기에 자동으로 변환 시켜줍니다.Integer num = 10; 언박싱은 반대로 래퍼 클래스를 기본형으로 자동 변환해주는 것을 뜻하는데, 언박싱에 대한 내용은 포스팅 하단에 남기겠습니다. 오토 박싱의..

정규표현식 처리 성능 개선Java에서 문자열 정규식 검증을 위해 흔히 String.matches()를 사용합니다. 하지만 matches()는 내부적으로 Pattern 객체를 호출마다 새로 생성합니다. 즉, 한번 쓰고 버려져서 가비지 컬렉션 대상이 되는 객체가 매번 생성되는 것 입니다. 1회성이면 차이는 없지만 루프 또는 대량 처리에서 사용하면 심각한 성능 저하를 가져올 수 있습니다.public static void main(String[] args) { List inputs = Arrays.asList( "1234", "abc", "9876", "12a4", "0000", "42", "99999" ); // String.matches() - 매번 Pattern 객체 생성 ..

※ 정적 팩터리 메서드란 : https://nirsa.tistory.com/428 생성자 대신 정적 팩터리 메서드를 활용하라Java9 부터는 Boolean(String) 생성자를 사용하면 deprecated(사용 자제, 향후 제거 예정) 되어있는 것을 확인할 수 있는데 항상 새 인스턴스를 반환하므로 비효율적이고, 문자열이 true 외의 값이면 모두 false를 반환하는데 직관적이지 않은 이유가 있습니다.※ Boolean(String) 생성자는 deprecated 되었지만 예전부터 존재했기에 호환성에 대한 문제와 valueOf(String)으로 바꾸게 되면 내부에서 TRUE / FALSE를 참조할 때 순환 참조 이슈가 발생할 가능성 등이 많아 현실적으로 제거 되기엔 힘들지 않을까 싶습니다. 불필요한 객체 ..
불필요한 객체 생성을 피하라이미 생성된 객체를 재사용할 수 있다면 새로운 객체를 만들지 말고 기존에 사용중인 객체를 재사용하자라는 의미로써 객체 생성에 의한 비용을 줄여 GC 및 메모리 낭비를 줄이기 위함입니다. 아래와 같은 코드가 있다면 new String()에 의해 코드가 실행될 때 마다 매번 새로운 객체를 heap에 생성합니다. 같은 값을 가지고 있으므로 기존 객체를 재사용하면 되지만, 매번 새로운 객체를 만들기 때문에 매우 비효율적으로 동작하게 됩니다.System.out.println(new String("hello")); // 새 객체 생성 1System.out.println(new String("hello")); // 새 객체 생성 2// 또는 String str = new String("he..
자원을 직접 명시할 경우객체가 직접 필요한 의존 객체를 생성하지 말고 외부에서 주입받도록 하여 결합도를 낮추자는 의미로 사용되며 의존 객체 주입 패턴이라고 불리웁니다. 아래의 코드에서는 자원을 직접 명시하여 특정 구현체에 대하여 강하게 결합된 형태를 확인할 수 있습니다.public class MailService { private final MailSender mailSender; public MailService() { this.mailSender = new SmtpMailSender(); // 직접 객체 생성 } public void sendWelcomeMail(String email) { mailSender.send(email, "어서오세요.", "참여..

기본 타입의 값 또는 관련 메서드를 모아놓는 용도인스턴스화를 막기 위해 "생성자를 안쓰면 되지 않나?" 라고 생각할 수 있지만, 개발자가 생성자를 구현하지 않을 경우 컴파일러가 public 기본 생성자를 만들어주기 때문에 private 생성자를 사용하여 인스턴스화를 막아야 합니다.우선 첫번째로 java.util.Math는 private 생성자를 사용하여 인스턴스화를 막아둔 모습을 확인할 수 있습니다. Math처럼 기본 타입의 값들을 모아놓는 용도로 사용하기 위해 인스턴스화를 막아두는 케이스가 있습니다. 두번째로는 아래의 코드처럼 모든 메서드가 static인 클래스에서도 모든 메서드가 정적 메서드이므로 인스턴스화를 할 이유가 없기 때문에 이러한 클래스를 구현할 때 private 생성자를 사용하여 인스턴스화..

싱글턴(Singleton) 이란?클래스의 인스턴스가 오직 하나만 생성이 가능하도록 보장하는 디자인 패턴 public static final 필드 방식의 싱글턴public static final을 사용하여 인스턴스를 생성하는 방식입니다. 하지만 리플렉션(AccessibleObject.setAccessible)에 의해 private 생성자를 호출할 수 있는 방법이 존재하여 싱글턴임을 100% 보장하지 않습니다.import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;public class Main { public static void main(String[] args) throws NoSuchMethodEx..
점층적 생성자 패턴과 자바 빈즈 패턴점층적 생성자 패턴(Telescoping Consturctor Pattern)은 매개변수를 1개 받는 생성자, 2개 받는 생성자, 3개 받는 생성자와 같이 모든 매개 변수를 다 받는 생성자까지 늘려가는 형태로써 매개 변수가 들어오는 상황에 대한 모든 생성자가 만들어진 패턴입니다.아래와 같이 모든 필드에 대해 매개 변수가 있는 생성자를 만들어 사용합니다.public class Student { private String name; private int age; private String major; private String school; // 생성자1: 필수값만 public Student(String name) { this(..
정적 팩터리 메서드란?정적 팩터리 메서드는 객체를 생성하는 메서드이지만 일반적으로 사용되는 new 연산자를 사용하지 않는 메서드 입니다. 클래스 내부에 static 메서드로 용도에 따라 of(), valueOf(), getInstance(), form()를 생성하여 객체를 반환하는 메서드입니다.public class Main { public static void main(String[] args) { Person p = Person.of("Nirsa"); // 정적 팩터리 메서드를 사용하여 객체 생성 System.out.println(p.getName()); // Nirsa 출력 }}class Person { private String name; // 외부에서 생성자를 호출하여 객체를 생성할..

※ 포스팅에서 사용된 그림 등을 퍼가시거나 기타 자료로 활용 하셔도 괜찮지만, 출처 표기 부탁 드립니다. 자바의 기본형 변수, 비트와 바이트, 자바 메모리(Java Data Type, Primitive Type, bit, byte, Java Memory Stack/Heap/Static) 자바에서의 자료형은 아래 그림과 같이 기본형(Primitive Type) 변수와 참조형(Reference Type) 변수로 나눠지는데, 이번 포스팅에서는 기본형 변수에 대해 다룹니다. A. 기본형 변수의 특징1 - 고정된 데이터 크기(byte)를 가지고 있음 B. 비트(bit)와 바이트(byte)의 이해 위의 그림에서 바이트는 자료형의 크기를 의미하게 되며 이를 이해하기 위해서는 비트(bit)와 바이트(byte)를 이해할..