본문 바로가기

프로그래밍 언어 (プログラミング言語)

Void Wrapper Class public abstract class AbstractTemplate { // 추상 클래스를 상속 받은 클래스가 T == String이면 execute()의 반환값이 String이 된다. private final LogTrace trace; protected AbstractTemplate(LogTrace trace) { this.trace = trace; } public T execute(String message){ // 구현체마다 execute()의 반환값이 다를 수가 있으니, 제네릭으로 정의를 하겠다. TraceStatus status = null; try{ status = trace.begin(message); // 비지니스 로직 호출 ( 변하는 부분 ) T result = call(); trac.. 더보기
Anonymous class in JAVA 익명 클래스 라고도 부른며, C++에서의 임시 객체와 같은 개념이다. package Anonymous; public class Insect { void attack(){ System.out.println("곤충은 공격을 한다"); } } package Anonymous; public class Anonymous { //★★방법 1 : 필드에 익명자식 객체를 생성 Insect spider1 = new Insect(){ String name = "무당거미"; //거미줄을 치다. void cobweb(){ System.out.println("사각형으로 거미줄을 친다."); } @Override void attack() { System.out.println(name + " 독을 발사한다."); } }; //★★.. 더보기
Optional 클래스 사용법 [ Optional 생성하기 ] Optional.empty() - 값이 Null인 경우 Optional은 Wrapper 클래스이기 때문에 값이 없을 수도 있는데, 이때는 Optional.empty()로 생성할 수 있다. Optional optional = Optional.empty(); System.out.println(optional); // Optional.empty System.out.println(optional.isPresent()); // false Optional 클래스는 내부에서 static 변수로 EMPTY 객체를 미리 생성해서 가지고 있다. 이러한 이유로 빈 객체를 여러 번 생성해줘야 하는 경우에도 1개의 EMPTY 객체를 공유함으로써 메모리를 절약하고 있다. public final c.. 더보기
Optional<T>의 탄생 배경 자바로 개발을 하다 보면 자주 많나는 NPE(NullPointerException)이라는 예외가 있다. 고로, 코드 아래와 같이 레퍼런스 변수가 null인 것을 참조하는 경우, NPE가 터지기 때문에 항상 레퍼런스 변수가 null인지 아닌지 확인하는 코드를 작성해야 하는 번잡함이 있다. List names = getNames(); names.sort(); // names가 null이라면 NPE가 발생함 List names = getNames(); // NPE를 방지하기 위해 null 검사를 해야함 if(names != null){ names.sort(); } [ Optional이란? ] Java8에서는 Optional 클래스를 사용해 NPE를 방지할 수 있도록 도와준다. Optional는 null이 올 .. 더보기
JAVA에는 unsigned 자료형이 존재하지 않는다!! 단..... JAVA에서 int형보다 더 큰 범위의 정수를 다룰 때에는 long형(8byte)를 사용한다. 이때, 음수를 제외한 0 ~ 양수 범위로 바꾸고 싶다면, JAVA 8 버전부터 지원되는 Integer나 Long클래스에서 unsigned를 다루는 메소드를 사용하면 된다. int vInt = Integer.parseUnsignedInt("4294967295"); System.out.println(vInt); // -1 String sInt = Integer.toUnsignedString(vInt); System.out.println(sInt); // 4294967295 long vLong = Long.parseUnsignedLong("18446744073709551615"); System.out.println(.. 더보기
체크 예외 vs 언체크 예외(런타임 예외) 체크 예외 vs 언체크 예외 차이점 : 언체크 예외를 던질 때, throws 선언을 하지 않는다. 체크 예외의 문제점 1. 체크 예외를 던질 떄마다 throws를 선언해줘야 한다. -> 체크 예외를 던지는 메서드가 100개가 있으면 100개 전부 throws를 선언해줘야 한다. 2. OCP위반. -> 예를 들어, 서비스 계층에서 SQLException을 사용하고 있는데, 이 예외는 JDBC 기술에 외존한다. 만약 JDBC를 사용하다가 JPA로 기술을 변경을 하면, 서비스 계층의SQLExcpeiton을 전~부 일일이 JPAExcpetion으로 변경을 해 줘야 한다. 즉, 수정에는 closed되어 있지가 않다. 3. 거의 대부분의 시스템에서 발생하는 예외(DB 서버 연결 등)는 애플리케이션 로직(서비스 계층.. 더보기
자바는 동적 할당(Dynamic Assignment)를 제공하지 못한다. 자바에는 동적인 배열을 제공하는 클래스들이 여러가지가 존재한다. 제일 흔하게 볼 수 있는 것이 ArrayList 이다. ArrayList를 예로들어 자바의 동적인 배열에 대해 설명하도록 하겠다. 자바에서는 동적으로 메모리 공간을 할당하지 못한다. 간단히 자바의 모든 배열은 int list[] = new int[10]; 위의 코드처럼 무조건 초기화를 통해 배열의 크기를 지정하여 사용하여야 한다. 근데 개발자 입장에서 위의 배열의 크기를 그때 그때 바꾸고 싶은 경우가 많을 것이다. 그래서 많은 개발자들이 ArrayList를 사용할 것이다. 그런데 자바는 동적인 배열을 제공하지 않는다. 그럼 ArrayList는 어떤 원리로 동적은 메모리 공간을 지원하는지 생각을 해보았는가?? 그 원리를 들여다보면 너무나 간단.. 더보기
자바에서 메모리를 절약하는 방법!! 메모리 누수(Leak) 자바에서 메모리 누수는 더 이상 사용되지 않는 객체들이 GC(가비지 컬렉션)에 의해 소멸되지 않고 누적되는 현상입니다. 가비지 컬렉션의 소멸 대상이 되려면 다른 Reference 변수에서 참조하고 있지 않아야 합니다. 1. 무의미하게 Wrapper Class를 만들지 말자!! -> 예를 들어, int는 4byte이나 Integer는 20byte이다. 기본 자료형보다 Wrapper Class의 크기가 훨씬 크다. 고로, 무의미하게 Wrapper Class를 남발하지는 말자! ( Wrapper 클래스보다는 기본형 배열(레퍼번스 변수)을 사용하자!!!) LinkedList l = new LinkedList(); // 메모리 많이 잡아 먹음. LinkedList l = new Linked.. 더보기