Java 5

와일드카드와 타입 소거 이해하기

List와 List는 서로 상속 관계가 아니다. Java는 와일드카드로 서로 다른 Generic 타입을 안전하게 함께 다루며, 타입 소거 방식 때문에 런타임 타입 검사와 배열 생성 등에 제약을 둔다. 이 글에서는 extends와 super를 선택하는 기준인 PECS부터 Generic의 주요 제약까지 살펴본다.들어가며Generic 클래스의 는 사용할 타입을 나중에 정하기 위한 타입 매개변수다. 예를 들어 Box에서는 T가 String이 되고, 컴파일러가 다른 타입의 저장을 막는다. 기본 문법만으로 하나의 정확한 타입을 다루는 코드는 작성할 수 있다. 하지만 List와 List을 모두 받는 합계 메서드처럼 여러 관련 타입을 함께 다루려면 타입 사이의 관계를 더 이해해야 한다.목차Generic 타입은 공변하지..

Generic 기본 이해하기: 타입 안전성과 재사용성

Generic은 클래스, 인터페이스, 메서드가 다룰 타입을 사용하는 쪽에서 결정하게 하는 Java의 타입 시스템 기능이다. 중복 코드를 줄이면서 잘못된 타입 사용을 컴파일 시점에 발견할 수 있다. 이 글에서는 Generic이 필요한 이유와 기본 선언법, 타입 매개변수의 범위를 제한하는 방법을 알아본다.들어가며여러 종류의 값을 보관하는 클래스를 만든다고 생각해 보자. Generic이 없다면 타입마다 클래스를 따로 만들거나 모든 값을 Object로 받아야 한다.public class ObjectBox { private Object value; public void set(Object value) { this.value = value; } public Object get() ..

final, static, static final 차이 이해하기

Java의 final, static, static final은 비슷해 보이지만 서로 다른 질문에 답하는 키워드다. final은 값을 다시 대입할 수 있는지, static은 멤버가 객체와 클래스 중 어디에 속하는지를 결정한다. 두 기준을 나누어 보면 세 표현의 차이를 명확하게 이해할 수 있다.들어가며Java 코드를 읽다 보면 다음과 같은 선언을 자주 만난다.final int maxRetry = 3;static int userCount = 0;static final int MAX_RETRY = 3; 세 선언은 모두 변수 앞에 수식어가 붙지만 의미는 서로 다르다. 특히 final을 무조건 상수라고 이해하거나, static을 값이 바뀌지 않는다는 뜻으로 오해하면 객체 간 상태 공유나 참조 변경과 관련된 버그를 ..

순수 Java 게시판 CRUD: 역할 분리로 이해하는 계층형 설계와 OOP

DB와 Spring 없이 ArrayList로 게시글 CRUD를 구현하고, 코드를 Domain∙Repository∙Service∙Controller로 분리한다. 단순히 클래스를 많이 만드는 것이 아니라, 각 객체가 어떤 책임을 가져야 하는지에 초점을 맞춘다.들어가며게시판의 핵심 기능은 생성(Create), 조회(Read), 수정(Update), 삭제(Delete)다. 처음에는 한 클래스에 모든 기능을 넣어도 동작한다. 하지만 입력 처리, 검증, 데이터 저장이 한곳에 섞이면 기능이 늘어날수록 변경 이유도 함께 늘어난다. 이 글에서는 다음 요구사항을 만족하는 콘솔 프로그램을 만든다.제목과 본문은 비어 있을 수 없다.제목은 50자를 넘을 수 없다.게시글은 자동으로 발급한 ID로 식별한다.전체 조회와 ID를 이용..

Java 코드는 어떻게 실행될까: JDK•JVM•메모리•스레드

.java 파일은 그대로 CPU에서 실행되지 않는다. javac가 만든 클래스 파일을 JVM이 로드하고 실행하며, 실행 중에는 스레드별 영역과 공유 영역이 함께 사용된다. 서버 개발에 필요한 범위에서 이 과정을 연결해 본다.들어가며Java로 서버 코드를 작성하다 보면 JDK, JVM, 힙, 스택, GC, 스레드라는 용어를 자주 만난다. 각각을 따로 외우면 관계가 잘 보이지 않는다. 소스 코드를 컴파일하고 실행하는 한 흐름 안에서 보면 용어의 역할이 명확해진다.목차소스 코드에서 실행까지JDK와 JVM의 역할프로세스와 스레드JVM 런타임 데이터 영역기본형과 참조형서버 코드에서 왜 중요한가정리소스 코드에서 실행까지다음과 같은 Java 소스 파일이 있다고 하자.Main.javapublic class Main {..