목록Java (37)
개발놀이터
Java에서 문자열을 다루는 대표적인 클래스로 String, StringBuilder, StringBuffer가 있다. 연산이 많지 않을 때는 위에 나열된 어떤 클래스를 사용하더라도 이슈가 발생할 가능성은 거의 없다. 그러나 연산 횟수가 많아지거나 멀티스레드, Race condition 등의 상황이 자주 발생한다면 각 클래스의 특징을 이해하고 상황에 맞는 적절한 클래스를 사용해야 한다. String vs StringBuilder, StringBuffer String과 StringBuilder, StringBuffer 클래스의 가장 큰 차이점은 String은 불변의 속성을, StringBuilder, StringBuffer는 변경가능한 속성을 갖는다는 점이다. String str = "hello";// S..
https://coding-review.tistory.com/125 GC (Garbage Collection)의 알고리즘 GC의 정의 GC는 Garbage Collector의 약자로 힙 영역에서 사용하지 않는 객체들을 제거하는 작업을 총칭한다. 이 객체를 제거하는 작업이 필요한 이유는 자바는 개발자가 메모리를 직접 해제해줄 수 coding-review.tistory.com 기존 면접 질문에서 Mark Sweep Compact 알고리즘이 나와서 꼬리질문을 대비해 GC의 알고리즘에 대해 자세히 알아봤다. 이번 포스팅에선 GC에 대해 좀 더 자세히 파고들어 갈 것이다. GC의 개념 GC는 메모리 관리 기법 중 하나로, 동적으로 할당했던 메모리 영역 중 필요 없게 된 영역을 해제하는 기능이다. 여기서 동적으로 ..
원시타입 원시타입은 정수, 실수 ,문자, 논리 리터럴등 실제 데이터 값을 저장하는 타입이다. int a = 10; 과 같이 코드를 작성했다면 정수 값이 할당될 수 있는 a라는 이름의 메모리 공간이 스택 영역에 생성되고 ,10이라는 값이 들어간다. 즉 원시타입은 메모리 공간의 실제 데이터 값이 저장되어 있다. 참조타입 참조타입은 기본타입을 제외한 타입으로 객체의 주소를 저장하는 타입이다. 문자열, 배열, 열거형 상수, 클래스, 인터페이스 등이 있다. Java에서 실제 객체는 힙 영역에 저장되며, 참조 타입 변수는 실제 객체의 주소를 스택 영역에 저장한다. 그리고 객체를 사용할 때마다 참조 변수에서 저장된 객체의 주소를 불러와 사용하게 된다. Person p = new Person(); 이라는 코드를 작성했..
동일성 동일성은 동일하다는 뜻으로 두 개의 객체가 완전히 같은 경우를 의미한다. 여기서 완전히 같다는 뜻은 두 객체가 사실상 하나의 객체로 봐도 무방하며, 주소 값이 같기 때문에 두 변수가 같은 객체를 가리키게 된다. 위의 예제에서 refVar1은 객체1을 가리키고 있고, refVar2와 refVar3는 객체2를 가리키고 있다. refVar2와 refVar3는 동일한 객체를 가리키고 있으므로, 두 변수는 동일하다고 이야기할 수 있다. 그리고 해당 변수가 동일한지 ==연산자를 통해 판별할 수 있다. 참고로 Primitive 타입은 객체가 아니라 주소가 없으므로 == 연산자를 사용하였을 때 내용이 같으면 동일하다고 판단한다. 동등성 동등성은 동등하다는 뜻으로 두 개의 객체가 같은 정보를 갖고 있는 경우를 의..
객체지향 프로그래밍의 5가지 설계 원칙 SOLID SOLID란 객체 지향 프로그래밍을 하면서 지켜야 하는 5대 원칙으로 각각 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), ISP(인터페이스 분리 원칙), DIP(의존관계 역전 원칙)의 앞글자를 따서 만들어졌다. SOLID원칙을 철저히 지키면 시간이 지나도 변경이 용이하고, 유지보수와 확장이 쉬운 소프트웨어를 개발하는데 도움이 되는 것으로 알려져있다. 이제부터 하나씩 살펴보자 단일 책임의 원칙 SRP (Single Responsibility Principle) 단일 책임의 원칙은 하나의 모듈은 한 가지 책임을 가져야 한다는 것으로, 이것은 모듈이 변경되는 이유가 한가지여야 함을 의미한다. 여기서 변경의 이유가 한가지라는..
Metaspace Java8부터 JVM의 메모리 영역 중 PermGen이라 부르는 Permanent Generation 메모리 영역이 사라지고 Metaspace 영역이 생겼다. Metaspace는 간단히 말해 Java의 클래스 로더가 로드한 클래스들의 메타데이터가 저장되는 공간이다. 여기서 잠깐! 메타데이터가 뭘까? MetaData란? 흔히 컴퓨터 사이언스 (CS)에서 말하는 메타데이터는 이렇게 정의한다. "어떤 목적을 가지고 만들어진 데이터" 디지털 카메라로 예를 들자면, 디지털 카메라로 사진을 찍어 기록할 때마다 카메라 자체의 정보와 촬영 당시의 시간, 노출도, 플래시 사용여부, 해상도, 사진크기 등의 사진 정보를 화상 데이터와 같이 저장하게 되어있다. 이러한 데이터를 분석하여 이용하면 그 뒤에 사진..
static Java에서 static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미한다. 이를 정확히 이해하기 위해서는 메모리 영역에 대한 이해가 필요하다. 일반적으로 우리가 만든 class는 static 영역에 생성되고, new 연산자를 통해 동적할당된 객체들은 Heap 영역에 생성된다. 객체의 생성시에 할당된 Heap영역의 메모리는 GC를 통해 수시로 관리를 받는다. 하지만 static 키워드를 통해 static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 가지지만, GC의 관리 영역 밖에 있기 때문에 프로그램이 종료시까지 메모리가 할당된 채로 존재한다. 때문에 너무 남발하면 시스템 성능에 악영향을 미칠 수 있다.
Q. 클래스와 객체에 대해 설명해주세요. A. 클래스는 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용됩니다. 객체는 식별가능한 개체 혹은 사물을 의미합니다. 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가지고 인스턴스를 통칭하는 용도로 사용됩니다.
어노테이션의 정의 애노테이션은 인터페이스를 기반으로 한 문법으로 주석처럼 코드에 달아 클래스에 특별한 의미를 부여하거나 기능을 주입할 수 있다. 어노테이션의 종류 어노테이션에도 종류가 있다. 내장 어노테이션 : 자바가 기본적으로 제공해주는 어노테이션 메타 어노테이션 : 어노테이션을 위한 어노테이션 사용자 정의 어노테이션 : 사용자가 직접 정의하는 어노테이션 내장 어노테이션 메타 어노테이션을 제외한 내장 어노테이션의 종류는 다음과 같다. @Override @Deprecated @FunctionalInterface @SuppressWarnings 이제 하나씩 살펴보자 @Override 오버라이딩을 올바르게 했는지 컴파일러가 체크해준다. Override 어노테이션은 오버라이딩 할 때, 메서드의 이름을 잘못 적..
제네릭 자바에서 제네릭이란 데이터의 타입을 일반화한다는 것을 의미한다. 제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다. 이렇게 컴파일 시에 미리 타입 검사를 수행하면 다음과 같은 장점을 지닌다. 클래스나 메소드 내부에서 사용되는 객체의 타입 안전성을 높일 수 있다. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다. 자바5 이전에는 여러 타입을 사용하는 대부분의 클래스나 메소드에서 인수나 반환값으로 Object타입을 사용했다. 하지만 이 경우에는 반환된 Object객체를 다시 원하는 타입으로 타입 변환해야 하며, 이때 오류가 발생할 가능성도 존재한다. 하지만 자바5부터 도입된 제네릭을 사용하면 컴파일 시에 미리 타입이 정해지므로, 타입 검..