본문 바로가기

전체 글

(341)
[JAVA Adv] StringBuffer vs StringBuilder 그리고 String StringBuffer vs StringBuilder String 의 정체두 클래스의 차이를 알기 위해서 일단 String 객체의 정체를 짚어보고 가자. String 객체는 기본적으로 immutable 이다. 내부적으로 char[] 배열을 사용하고 있고 이 배열은 변경이 불가능하다는 뜻이다. 즉, Constant Pool에 문자열이 특정 상수로 저장되어 더 이상 변하지 않는, 변할 수 없는 값이 되는 것이다. (물론 참조 변수인 String 객체는 Heap 영역에 생성된다! String 객체 자체가 Constant Pool에 생성된다는 것이 아니다.) 이 String 객체에 문자열을 저장하고, + 연산자 또는 concat 메소드를 통해 새로운 문자열을 덧붙이려고 할 때는, 기존의 String 객체가 가리..
[DP] 1. 싱글턴 패턴(Singleton pattern) #1. 싱글턴 패턴(Singleton Pattern) 싱글턴 패턴이란 인스턴스를 하나만 만들어 사용하기 위한 패턴이다. 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등의 경우, 인스턴스를 여러 개 만들게 되면 자원을 낭비하게 되거나 버그를 발생시킬 수 있으므로 오직 하나만 생성하고 그 인스턴스를 사용하도록 하는 것이 이 패턴의 목적이다. 하나의 인스턴스만을 유지하기 위해 인스턴스 생성에 특별한 제약을 걸어둬야 한다. new를 실행할 수 없도록 생성자에 private 접근 제어자를 지정하고, 유일한 단일 객체를 반환할 수 있도록 정적 메소드를 지원해야 한다. 또한 유일한 단일 객체를 참조할 정적 참조변수가 필요하다. Singleton.java >> ver.1 public class Singleton { p..
Spring 의 시작, 프레임워크의 구성요소와 동작원리 Spring Framework의 구성요소와 동작원리POJO 스프링의 특징을 살펴보면 POJO라는 단어가 등장한다. POJO란 Plain Old Java Object로 직역하자면 평범한 옛날 자바 객체이다. 말 그대로 자바 객체인 것이다. 이게 뭐라고 스프링의 특징이라고 까지 하는가? 과거에는 자바로 웹 애플리케이션을 설계하기 위해 Servlet 클래스를 상속받아 구현하였다. 이 Servlet 클래스는 POJO가 아닌 것이다. 개발자가 직접 Servlet 클래스를 작성하지 않고 POJO 만으로 웹 애플리케이션을 구축할 수 있다는 것이 스프링의 특징이다. 그러면 어떠한 장점이 있는가? Servlet 클래스를 이용해서 자바 웹 애플리케이션을 구축하려면 반드시 Servlet에서 요구하는 규칙에 맞게 클래스를 만..
RDB 성능 이슈 1. Index란 RDB 성능 이슈 #1 데이터베이스의 성능 이슈는 디스크 I/O를 어떻게 줄이느냐에서 시작된다. 디스크 I/O란 디스크 드라이브의 플래터(원판)을 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽는 것을 의미한다. 이 때 데이터를 읽는데 걸리는 시간은 디스크 헤더를 움직여서 읽고 쓸 위치로 옮기는 단계에서 결정된다. 즉 디스크의 성능은 디스크 헤더의 위치 이동 없이 얼마나 많은 데이터를 한 번에 기록하느냐에 따라 결정된다고 볼 수 있다. 그렇기 때문에 순차 I/O가 랜덤 I/O보다 빠를 수 밖에 없다. 하지만 현실에서는 대부분의 I/O 작업이 랜덤 I/O 이다. 랜덤 I/O를 순차 I/O로 바꿔서 실행할 수는 없을까? 이러한 생각에서부터 시작되는 데이터베이스 쿼리 튜닝은 ..
[DataStructure] hashcode와 HashMap에 대해서 Hash Code와 HashMapHashMap는 내부적으로 배열을 사용하여 데이터를 저장하기 때문에 빠른 검색 속도를 갖는다. 특정한 값을 Searching 하는데 데이터 고유의 인덱스로 접근하게 되므로 Time Complexity가 O(1)이 되는 것이다. 그리고 데이터의 삽입과 삭제 시 기존 데이터를 밀어내거나 다시 채우는 작업이 필요없도록 '특별한 알고리즘'을 이용하여 데이터와 연관된 고유한 숫자를 만들어 낸 뒤 이를 인덱스로 사용한다. 특정 데이터가 저장되는 인덱스는 그 데이터만의 고유한 위치이기 때문에 삽입 시 다른 데이터의 사이에 끼어들거나 삭제 시 다른 데이터로 채울 필요가 없으므로 추가적인 데이터의 이동이 없다. `특별한 알고리즘`이란 것을 통해 고유한 인덱스 값을 설정하는 것이 중요해보인..
다시 보는 객체 지향 개발 공부를 시작할 때, 객체 지향이란 무엇인가, 객체 지향적인 설계는 어떻게 해야 하는 것인가에 대한 포스팅을 한 적이 있다. 이쯤에서 이 개념들을 다시 한 번 짚고 넘어가봐야 할 것 같아서 다시 한 번 정리해봤다. #다시 보는 객체 지향객체 지향의 시작 우리가 주변에서 사물을 인지하는 방식대로 프로그래밍할 수 있지 않겠는가 하는 것이 객체지향의 출발이다. 객체 지향에서 객체를 다음과 같이 정의한다. 세상에 존재하는 모든 것은 객체이며 각각의 객체는 고유하다. 또한 객체는 어떠한 속성을 갖고 어떠한 행위를 한다. 이에 따라 객체의 속성을 property로 정의하고 행위를 method로 정의한다. 객체 지향은 어떤 특성을 갖고 있는가? 캡슐화 : 정보은닉 상속 : 재사용 추상화 : 모델링 다형성 : 사용..
[서평] 스프링 입문을 위한 자바 객체 지향의 원리와 이해 [서평] 스프링 입문을 위한 자바 객체 지향의 원리와 이해 스프링 책도 아니고 자바 책도 아니다. 책 제목 그대로 객체 지향을 위한 책이다. 딱 자바 기본서를 통해 자바를 한 번 경험해봤거나 자바 기본 강의를 수강하고 나서 보면 좋을 책이다. 자바 프로그램이 작동하는 구조, 메모리 할당 등에 대해서 설명해준다. 정말 자세한 부분까지는 아니지만 자바 코드를 작성할 때 실수할 수 있는 부분을 잡을 수 있을 정도로 설명하고 있다. JVM, GC 등의 원리에 대해서는 일체 다루지 않는다. 이 책의 초점은 이런 것이 아니라 바로 ‘객체 지향’이다. 자바의 객체지향적인 특징과 그와 관련된 문법들을 간략하게 소개하고, 각각의 특징들이 녹아들어간 객체 지향의 5원칙에 대해 설명한다. 이 책의 저자는 붕어빵과 붕어빵틀로..
[Java] 자바의 기본적인 이슈들 5가지 #JAVA의 기본적인 이슈들 5가지 1. 다시 자바의 기본으로 JDK(Java Development Kit) : 자바 개발 도구 - JVM용 소프트웨어 개발 도구 JRE(Java Runtime Environment) : 자바 실행 환경 - JVM용 OS JVM(Java Virtual Machine) : 자바 가상 머신 - 가상의 컴퓨터 JDK를 이용해 개발된 프로그램은 JRE에 의해 가상의 컴퓨터인 JVM 상에서 구동된다. JDK가 JRE를 포함하고 JRE는 JVM을 포함하는 형태로 배포된다. JDK는 자바 소스 컴파일러인 javac.exe를 포함하고 있고,JRE는 자바 프로그램 실행기인 java.exe를 포함하고 있다. 2. 메모리는 어떻게 사용되는가 일반적인 프로그램은 이 프로그램에게 할당된 메모리 ..