디자인 패턴이란? 좋은 코드를 설계하기 위한 일종의 설계 디자인 방법론 오늘 포스팅할 싱글톤 패턴은 GoF 디자인 패턴 중 생성 패턴의 한 종류이다 싱글톤(Singlenton)이란? 싱글톤 패턴은 객체의 인스턴스를 하나만 생성하는 방식을 말한다. 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴하게 된다. 이렇게 최초에 생성한 하나의 인스턴스를 메모리에 등록하여 여러 스레드가 동시에 해당 인스턴스를 공유하며 사용하게끔 할수 있으므로 요청이 많은 곳에서 사용하면 효율을 높일 수 있다. 싱글톤을 사용하는 이유? 메모리 낭비를 방지할 수 있다. 전역성을 띄는 객체이므로 다른 객체와 공유가 가능하다. 멀티 스레드 환경에서 싱글톤..
JCF(Java Collection Framework) Collection 인터페이스 1. Iterable/Iterator 인터페이스 Iterable : ㄴ public Iterator iterator(); Iterator 인터페이스를 반환하는 메소드 Iterator : ㄴ public boolean hasNext(); / public E next(); /public remove(); Collection은 Iterable 인터페이스를 상속받고 List, Set을 구현하는 클래스에서 위의 메소드를 구현하여 데이터를 저장, 삭제하게 된다. 2. 저장 가능한 데이터 타입 Collection은 기본 데이터형이 아닌 참조 데이터형만 저장이 가능하므로 Object 타입의 객체로 저장해야 한다. 기본 데이터형은 Wr..
래퍼 클래스란(Wrapper Class) 기본 타입의의 데이터를 객체로 포장해주는 클래스 프로그래밍 중 기본 타입의 데이터를 객체로 표현해야 할 때 사용된다 ex) DB에서 자료형이 정수형이지만 null 값이 필요한 경우 VO에서 Integer를 사용 - 객체는 null 값 처리 가능, 기본타입은 불가능 래퍼 클래스 구조도 래퍼 클래스의 부모는 Number, 최종 부모 클래스는 Object인 것을 볼 수 있다 박싱(Boxing)과 언박싱(UnBoxing) Boxing : 기본 타입의 값을 Wrapper 객체로 만드는 과정 UnBoxing : Wrapper 객체에서 기본 타입의 값을 얻는 과정 자동 박싱(AutoBoxing)과 자동 언박싱(AutoUnBoxing) Wrapper 객체에 기본 타입의 데이터가..
자바 객체 정렬 방법 Comparable 인터페이스 객체 자신이 가지고 있는 자신의 정렬 기준을 정의하는 인터페이스 직접 클래스를 만들때 해당 클래스 객체의 정렬 기준을 미리 설정해두기 위해 구현하는 인터페이스 래퍼 클래스나 String과 같이 자바에서 정렬이 가능한 타입들은 모두 Coparable을 구현하고 있다 Int ComporeTo()메소드 리턴값 음수일 경우 : 두 요소의 위치를 바꿈 양수일 경우: 두 요소의 위치를 그대로 만약 배열이 {3,6,1}이라면 처음 비교할 때 compareTo의 파라미터값은 3, this 값은 6 package Programmers.sort; import java.util.ArrayList; import java.util.Collections; import java...
프록시 패턴이란? 원래 객체를 감싸고 있는 객체이며 원래 객체와 타입이 동일하다. 프록시 패턴을 쓰는 상황 원래 객체에 접근을 제어하고 싶거나, 부가 기능을 추가하여야 할때 사용된다 public interface ExampleService { void firstEvent(); void secondEvent(); } public class TestService implements ExampleService { @Override public void fristEvent(){ Sytem.out.printl("This is firstEvent"); } @Override public void secondEvent(){ System.out.printn("This is secondEvent"); } } 만약 위의 코..
프로그램의 오류 두가지 1. 컴파일 에러 (컴파일 중 발생하는 에러) 2. 런타임 에러 (어플리케이션 실행 중 발생하는 에러) 자바 1. 에러 - JVM 실행에 문제 -> 개발자가 해결할 수 없음 2. 예외 - 사용자의 잘못된 조작 or 개발자의 잘못된 코딩으로 발생 둘의 공통점 : 둘다 프로그램이 예기치 못하게 종료된다 예외는 예외처리를 통해 프로그램의 종료를 막고 정상 실행할 수 있다 예외처리 2가지 방법 1. try/catch try 안에서 에러가 발생하면 catch 메소드의 매개변수에 에러를 담고있는 exception 객체를 JVM이 넘겨주고 메소드를 실행시킨다 catch 구문의 메소드에 예외처리 로직을 넣어 예외를 처리할 수 있다 예외 발생 여부와 관계없이 무조건 실행문이 있다면 finally ..
1. Overriding 부모 클래스의 메소드를 자식이 재정의하는 것 (메소드 업그레이드) 부모 메소드의 리턴타입과 매개변수의 갯수, 타입, 순서가 같아야 오버라이딩을 할 수 있다 2. Overloading 같은 클래스 안에서 메소드의 이름은 같지만 매개변수를 다르게 받는 것 똑같은 취지 & 똑같은 동작 방법이지만 매개변수의 타입 또는 갯수가 다름으로 인하여 또 다른 이름의 메소드를 만드는 것을 방지 같은 클래스 내에서 같은 이름의 메소드 다른 타입 혹은 갯수의 매개변수 리턴값이 같아야 한다
JVM 구성 요소 1. Class Loader JVM 내로 클래스 파일을 load하고 link를 통해 배치를 수행하는 모듈로 Runtime 시에 동적으로 클래스를 로드한다. 자바는 동적 코드, 컴파일 타임이 아니라 런타임에 참조한다. 즉, 클래스를 처음으로 참조할 때 해당 클래스를 load하고 link한다. 2. Execution Engine class loader를 통해 배치된 클래스를 실행시킨다. 클래스 파일(바이트 코드)은 비교적 인간이 보기 쉬운 형태이기 때문에 기계가 실행할 수 있는 형태로 변경시키는데 이 때, 두 가지 방식을 사용한다. ( 인터프리터, JIT ) 3. Interpreter 실행 엔진은 바이트 코드를 명령어 단위로 실행한다. 이는 한 줄 씩 수행하기 때문에 느리다는 단점을 가지고..