제네릭이란 데이터의 타입을 일반화(Generalization) 하는 것을 의미한다. 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일시 타입체크(compile-time type check)를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 떄문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다. 제네릭은 자바 5 부터 사용할 수 있는 기능으로 제네릭을 지원하기 전에는 여러 타입을 사용하는 대부분 메서드나 컬렉션 클래스에서 인수나 반환 값으로 Object 타입을 사용했기 때문에 컬렉션에서 객체를 꺼낼 때 마다 형변환을 해야했다. 그런데 누군가 실수로 엉뚱한 타입의 객체를 넣어두면 런타임에 형변환 오류가 나곤 했다. 반면 제네릭을 사용하면 컬렉션이 담을 수 있는 타입을 컴파일러에 ..
Java의 참조 유형 Java에는 다양한 참조 유형이 있는데 참조 유형에 따라 가비지 컬렉터의 실행 대상 여부 및 시점이 달라진다. Strong Reference (강한 참조) 자바의 기본 참조 유형이다. Class class = new Class(); Integer i = 1; String str = "str"; ... Strong Reference의 경우 참조를 가지고 있는 한 가비지 컬렉터의 대상이 되지 않는다. (가비지 컬렉터는 참조하고 있는 객체의 경우 대상에서 제외한다.) Soft Reference (부드러운 참조) Class class = new Class(); SoftReference sRef = new SoftReference(class); class = null; class = sRef..
정리가 잘 되어 있는 블로그 https://coding-factory.tistory.com/829 [Java] 가비지 컬렉션(GC, Garbage Collection) 총정리 가비지 컬렉션(Garbage Collection)이란? 가비지 컬렉션은 영어로 Garbeage Collection으로 줄여서 GC라고도 부릅니다. 가비지 컬렉션은 자바의 메모리 관리 방법 중의 하나로 JVM의 Heap 영역에서 동적으로 coding-factory.tistory.com https://meoru-tech.tistory.com/81 💡 [CS지식] Garbage Collection에 대하여 Garbage Collection Java에선 개발자가 프로그램 코드로 메모리를 명시적으로 해제하지 않아요 JVM(Java Virtu..
프로그램을 실행시키기 위해서 컴퓨터 메모리에 실행시킬 데이터와 명령어들을 저장해야 한다. 자바 프로그램 역시 운영체제(OS)가 제어하고 있는 메모리(RAM)를 사용 및 할당받을 수 있어야 하는데 JVM(Java Virtual Muchine)이 H/W, OS위에서 동작하며 메모리를 할당받고 자바프로그램을 호출하여 실행한다. Java 프로그램 실행 과정 개발자가 만든 .java 파일을 javac 명령으로 컴파일하면 .class 바이트 코드 파일이 만들어진다. 프로그램 실행하면 JVM은 OS로 부터 프로그램이 필요로 하는 메모리를 할당 받는다. 바이트 코드 파일을 Class Loader를 통해 동적으로 클래스를 로드하고 JVM 내로 로딩하여 검증 - 링크 - 초기화 과정을 거치고 Runtime Data Are..
팩토리 메서드 패턴은 객체지향 디자인 패턴이다. Factory method는 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이면서 자식(하위) 클래스가 어떤 객체를 생성할지 결정하도록 하는 패턴이기도 하다. 부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다. 출처 https://ko.wikipedia.org/wiki/%ED%8C%A9%ED%86%A0%EB%A6%AC_%EB%A9%94%EC%84%9C%EB%93%9C_%ED%8C%A8%ED%84%B4
요청마다 매번 새로운 인스턴스를 생성하는 것이 아닌 동일한 속성을 가진 인스턴스를 가능한 한 공유해서 사용함으로써 메모리를 절약하는 패턴이다. 예를 들어 무지개 색의 색연필이 있고 100명의 사용자가 각각 7원색을 모두 요청 하였다고 가정했을 때, 요청마다 새로운 인스턴스를 생성하게 되면 700개의 인스턴스가 생성되어야 한다. 그러나 플라이 웨이트 패턴을 이용하여 요청된 속성의 객체를 캐싱하여 동일한 속성을 요청하였을 경우 캐싱해둔 인스턴스를 반환함으로서 7개의 인스턴스로 처리 가능하다. 플라이 웨이트 패턴 구성 공유될 객체 객체의 인스턴스를 생성하고 캐싱하여 공유해주는 팩토리 예제 코드 색연필 클래스 /** * 길이와 무게 등은 고정값이라고 가정하고 진행한다. * 색만 변경한다. */ public ..
장점 - 기능 인터페이스와 구현을 담당하는 추상 클래스로 독립적으로 구성이 된다. - 각 계층을 독립적으로 확장 및 변경이 가능해진다. - 객체 간 결합도를 낮출 수 있다. - 기존 설계에 새로운 요소들을 지속적으로 추가할 때 유용하다. - 기존 코드 변경 없이 기능을 확장할 수 있다. 단점 - 계층 구조에 새로운 구현체 및 기능 등을 추가하다보면 설계가 복잡해질 수 있다. 설계 구조 필기구를 추상 클래스로 선언하여 색연필, 샤프 등으로 사용하고 작성의 기능을 분리하여 선, 원, 사각형 등의 기능을 정의한다. 예제 코드 필기구 추상 클래스 public abstract class Pencil { protected Writing writing; protected Pencil(Writing writing) {..
사용하는 API에 따라 다형성에 입각하여 Primitive type 데이터를 객체처럼 다뤄야 할 때가 있다. 메소드 매개변수 값을 객체로 넣어야 하면 기본타입 그대로 사용할 수 없기 때문에 기본타입 각각이 객체타입으로 변환할 수 있는 Wrapper Class를 가지고 있다. Primitive Type Wrapper Class byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean JDK1.4 이전에는 기본형과 참조형 간의 연산이 불가능했기 때문에 래퍼 클래스로 기본형을 객체로 만들어서 연산해야 했다. 기본형을 참조형으로 만들 때도 기본형 선언한 변숫값을 래핑클래스 인스턴스를 만들며..