Backend Roadmap/Java 7

[Java] final 키워드

Java에서 final 키워드는 불변성 보장을 위해 변수, 메서드, 클래스 등 여러 요소에 붙여 사용하며, 각 경우에 따라 의미가 달라진다. 공통적으로 예기치 않게 수정되는 것을 방지함으로써 의도된 동작을 보장한다. 변수변수에 final을 사용하면 해당 변수의 값은 수정할 수 없다. 그렇기 때문에 초기화는 필수적이다. 선언하는 즉시 초기화하지 않아도 되지만 해당 변수를 사용하기 전에 반드시 한 번 초기화해야 하며, 그렇지 않으면 컴파일 에러가 발생한다.final int birth = 2024;birth = 2025; // 컴파일 오류: 재할당 불가능// orclass TestClass { final int birth; TestClass(int birth) { this.birth ..

정적 바인딩과 동적 바인딩

바인딩(Binding)은 함수 호출 시, 호출된 부분을 해당 함수의 정의와 연결짓는 것을 뜻한다. 메모리 관점에서 함수의 정의가 위치한 메모리 주소로 연결되는 것이다. 바인딩이 되는 시점에 따라 정적 바인딩과 동적 바인딩으로 구분할 수 있다.정적 바인딩컴파일 시간에 성격이 결정된다.오버로딩private, final, static 이 붙은 메서드오버로딩은 같은 메서드를 매개변수의 타입과 개수를 다르게 정의하여 다양한 메서드를 구현하는 것을 의미한다.class Student { String name; int age; public void printInfo(String name) { System.out.println("[Student] name: " + name); } ..

가비지 컬렉션(Garbage Collection)

C/C++ 프로그래밍을 할 때 메모리 누수를 막기 위해 객체를 생성한 후 사용하지 않는 객체의 메모리를 직접 해제해줘야 했다. 하지만 Java에서는 JVM의 가비지 컬렉션(GC)이 불필요한 메모리를 알아서 정리해주기 때문에 직접 해제해주는 일이 없다.GC를 해도 더이상 사용 가능한 메모리 영역이 없는데 계속 메모리 할당을 하려고 하면, OutOfMemoryError 가 발생하여 WAS가 다운될 수도 있다.가바지 컬렉션이란?사용하지 않는 객체를 메모리에서 삭제하는 작업을 GC(Garbage Collection)라고 하고, JVM에서 GC를 수행한다.JVM의 메모리는 5가지 영역(class, stack, heap, native method, PC)으로 나뉘는데, GC는 힙 메모리만 다룬다.일반적으로 다음과 ..

오토 박싱과 오토 언박싱

자바에는 기본 타입과 Wrapper 클래스가 존재한다.기본타입Wrapper 클래스booleanBooleanbyteByteshortShortintIntfloatFloatlongLongdoubleDoublecharCharacter Wrapper 클래스프로그램에 따라 기본 타입의 데이터를 객체로 취급해야 하는 경우가 있다. 이때 기본 타입의 데이터를 객체로 포장해 주는 클래스를 Wrapper 클래스라고 한다.Wrapper 클래스는 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해당 값을 가지는 객체로 만들어준다.Wrapper 클래스는 java.lang 패키지에 포함되어 제공된다. 박싱과 언박싱박싱 : 기본 타입 데이터에 대응하는 Wrapper 클래스로 만드는 동작언박싱 : Wrapper 클래스에서 기본 타..

스트림(Stream)

스트림이란?Java 8부터 추가된 스트림(Stream)은 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자다. 스트림을 활용해서 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다. 또한 람다를 이용해서 코드의 양을 줄이고 간결하게 표현 가능하다. Java 6 이전 : iterator 객체 이용forEach 구문 이용스트림 이용 스트림의 특징 스트림은 원본 데이터를 변경하지 않는다.스트림은 일회성이다. 컬렉션의 요소를 모두 읽고 나면 닫혀서 다시 사용할 수 없다. 필요하다면 재생성해야 한다.내부 반복자를 사용하므로 병렬 처리가 가능하다. 내부 반복자를 사용해서 얻는 이점은 컬렉션 내부에서 어떻게 요소를 반복시킬 것인가는..

자바 타입 제네릭(Generic)

제네릭(Generic)란?자바에서 제네릭이란 데이터의 타입을 일반화한다는 것을 의미한다. 다양한 타입의 객체를 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능을 의미한다. 컴파일 시에 객체의 타입을 체크하기 때문에 다음과 같은 장점을 가진다. 1. 클래스나 인터페이스, 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있다. 의도하지 않은 타입의 객체가 저장되는 것을 막고 잘못된 형변환을 막을 수 있기 때문이다. 2. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다. 제네릭 타입은 클래스와 메서드에 선언할 수 있다. 제네릭스를 활용하면 동작은 같지만 클래스 타입을 바꿔야 하는 경우를 쉽게 다룰 수 있다. //제네릭 도입 전public static void..

JVM 구조, JRE, JDK

자바는 객체 지향 언어로 개발된 프로그래밍 언어다. 자바는 자바 가상 머신을 사용하여, 운영체제와는 독립적으로 동작할 수 있다. 따라서 자바는 어느 운영체제에서나 같은 형태로 실행될 수 있다. 자바 언어의 장점으로는 자동 메모리 관리를 지원하여 다른 언어에 비해 안정성이 높다는 점이 있다.  JVM이란? JVM(Java Virtual Machine)은 자바를 실행하기 위한 가상 기계(컴퓨터)라고 할 수 있다. JVM을 사용함으로써 OS에 종속받지 않고 CPU가 자바를 인식하고 실행할 수 있다. 자바 소스코드(*.java)는 CPU가 인식하지 못하기 때문에 기계어로 컴파일을 해야 한다. 하지만 자바는 JVM이라는 가상머신을 거쳐 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 바로 컴파일 되는 것이..