왜 new Integer()를 사용하면 안 될까?
·
Java
겉으로 보면 `new Integer(10)` 과 `Integer.valueOf(10)` 은 완전히 달라 보인다.하지만 결과적으로 만들어지는 것은 둘 다 Integer 객체이다.차이는 “객체를 어떻게 만들고 관리하느냐”에 있다. new Integer(10)Integer a = new Integer(10);이 코드는 무조건 새로운 객체를 생성한다.메모리 구조를 보면 이렇게 된다.a ───▶ [ Integer 객체 (10) ]같은 코드를 여러 번 실행하면Integer a = new Integer(10);Integer b = new Integer(10);이렇게 된다.a ───▶ [ 10 ]b ───▶ [ 10 ]✔ 값은 같지만✔ 서로 다른 객체이다.따라서a == b // false이다. Integer.valu..
static
·
Java
자바에서 static은 한마디로 “객체(인스턴스)가 아니라 클래스에 소속된다” 는 뜻이다.그래서 static이 붙은 멤버는 new로 만든 객체마다 따로 생기는 게 아니라, 클래스 전체가 공유하는 단 하나가 된다.서블릿, 톰캣, 멀티스레드 환경에서 static이 자주 언급되는 이유도 바로 이 “공유” 특성 때문이다. 1) static이 붙으면 뭐가 달라지나?인스턴스 멤버(기본)class User { int age;}new User()를 할 때마다 age는 각 객체마다 따로 존재한다.즉, 객체가 10개면 age도 10개다.static 멤버class User { static int count;}User 클래스에 count는 딱 1개만 존재한다.new User()를 100번 해도 count는 여전히 ..
enum: 사용이유와 예시
·
Java
enum을 처음 보면 제일 헷갈리는 포인트가 많다.결론부터 말하면,enum은 미리 만들어진 객체(인스턴스) 목록이다.GET과 POST는 단순한 글자가 아니라 HttpMethod 타입의 객체다.this == POST는 “현재 이 객체가 POST 객체냐?”를 묻는 비교다. `enum`을 쓰는 이유: 문자열 `POST`로도 되는데 왜 굳이?문자열은 아무 값이나 들어올 수 있고, `enum`은 정해진 값만 들어올 수 있다.그래서 `enum`은 실수를 “런타임 버그”가 아니라 “컴파일/초기 처리 단계”에서 잡게 해준다.1) 오타가 “조용히 통과”하는 문제를 막는다 (가장 큼)문자열 방식:String method = request.getMethod(); // "GET" 또는 "POST" 같은 문자열이라고 가정if..
쓰레드란?
·
Java
멀티스레드를 공부하다 보면 항상 막히는 지점이 있다.프로그램 / 프로세스 / 스레드가 각각 뭔지 “말로는 아는 것 같은데”, 막상 코드나 그림으로 나오면 갑자기 섞여버린다.그래서 이번에는 개념을 실행 흐름 기준으로 정리해보려고 한다.핵심은 이거다.프로그램(디스크) → 실행하면 프로세스(메모리) → 그 안에서 일하는 흐름이 스레드(실행 단위) 출발점: 프로세스(Process)와 쓰레드(Thread)프로세스란?실행 중인 프로그램을 프로세스라고 부른다.프로그램 파일(.exe, .jar)은 디스크에 “저장된 상태”일 뿐이고,그걸 실행해서 메모리에 올라가고 CPU를 할당받아 돌아가는 상태가 되면 프로세스가 된다.여기서 중요한 성질이 하나 있다.프로세스는 보통 자기만의 메모리 공간(주소 공간)을 가진다.그래서 프..