자바 메모리 구조와 static
2026. 5. 26. 05:30
자바/김영한의 실전 자바 - 기본편
자바 프로그램이 실행되는 동안 메모리는 아무렇게나 쓰이지 않습니다. 용도에 따라 메서드 영역, 스택 영역, 힙 영역 세 구역으로 나뉘어 일합니다. 이 구조를 이해하면 static 키워드가 왜 정적인지, 변수가 언제 태어나 언제 사라지는지가 한 번에 풀립니다.메모리의 세 구역학교 급식실을 떠올려 봅시다. 급식실에는 세 가지 공간이 있습니다. 레시피 게시판에는 메뉴별 조리법이 붙어 있고, 조리대에서는 지금 한 끼분을 실제로 만들며, 완성 트레이에는 만들어진 음식들이 놓입니다. 자바 메모리도 정확히 이 세 공간과 대응됩니다.영역역할급식실 비유메서드 영역클래스 정보, 메서드 코드, static 변수, 공통 상수를 보관. 프로그램 전체가 공유레시피 게시판 (조리법 한 장)스택 영역메서드 호출과 지역 변수를 관리...
접근 제어자
2026. 5. 24. 18:00
자바/김영한의 실전 자바 - 기본편
자바는 public, private 같은 접근 제어자를 제공합니다. 이름 그대로 클래스 외부에서 특정 필드나 메서드에 접근하는 것을 허용할지 막을지 정하는 장치입니다. 왜 굳이 막아야 하는지, 막지 않으면 어떤 사고가 나는지부터 차근차근 풀어 봅니다.접근을 막지 않으면 생기는 일커피 자동판매기 안에 들어가는 소프트웨어를 개발한다고 해 봅시다. 요구사항이 하나 있습니다. 추출 온도는 절대 95도를 넘으면 안 된다. 95도를 넘기면 부품이 녹아 고장 나기 때문입니다.그래서 온도를 올리는 기능을 만들 때, 95도가 되면 더 올라가지 않도록 안전장치를 넣었습니다. 처음 개발자는 이 규칙을 알았고, 프로그램은 잘 동작했습니다. 프로젝트는 성공적으로 끝났습니다.시간이 흘러 다음 모델을 만들게 되었고, 사정을 모르는..
패키지
2026. 5. 24. 02:27
자바/김영한의 실전 자바 - 기본편
프로그램이 작을 때는 클래스 몇 개를 한곳에 두어도 별 문제가 없습니다. 그런데 기능이 늘어나 클래스가 수십 개, 수백 개로 불어나면 이야기가 달라집니다. 패키지는 이렇게 늘어난 클래스를 의미 단위로 묶어 정리하는 자바의 폴더 같은 장치입니다. 큰 도서관에서 책을 분야별 서가에 꽂아 두는 것과 같은 발상입니다.왜 패키지가 필요한가도서관을 상상해 봅시다. 책이 스무 권이라면 책상 위에 그냥 쌓아 두어도 원하는 책을 금방 찾습니다. 그런데 책이 수만 권이 되면요? 책을 한곳에 쌓으면 아무도 원하는 책을 못 찾습니다. 그래서 도서관은 문학, 역사, 과학 같은 분야로 서가를 나누고, 그 안을 다시 세부 주제로 나눕니다.자바 프로젝트도 똑같습니다. 음식 배달 앱을 만든다고 해 봅시다. 처음에는 가게, 메뉴, 주문..
생성자
2026. 5. 21. 23:18
자바/김영한의 실전 자바 - 기본편
객체를 만들자마자 곧바로 초기값을 채워야 하는 경우가 정말 많습니다. 매번 별도의 초기화 메서드를 만들고, 그걸 잊지 않고 호출하기를 바라는 건 위태롭습니다. 생성자는 객체가 태어나는 그 순간에 필요한 작업을 강제로 수행하게 해 주는 장치입니다. 생성자가 왜 필요한지, this는 무엇인지, 기본 생성자와 오버로딩, 그리고 this()까지 정리해 보겠습니다.왜 생성자가 필요한가온라인 강좌 수강 정보를 담는 객체가 있다고 합시다. 강좌명, 강사명, 수강 인원 같은 값이 필요합니다. 객체를 만든 뒤 이 값들을 하나하나 채우는 코드가 객체를 만들 때마다 반복됩니다. 반복을 없애려고 초기화 메서드를 따로 만들어 호출할 수도 있습니다.그런데 여기에 두 가지 불편이 있습니다. 첫째, 그 메서드는 결국 그 객체의 데이..
객체지향
2026. 5. 21. 23:17
자바/김영한의 실전 자바 - 기본편
클래스를 만들어 데이터를 묶어 쓴다고 해서 그것만으로 객체 지향이 되는 것은 아닙니다. 객체 지향의 진짜 핵심은 데이터와 그 데이터를 다루는 기능이 한 덩어리로 묶이는 데 있습니다. 절차 지향 코드를 단계별로 다듬어 객체 지향으로 옮겨 가는 과정을 따라가며, 무엇이 달라지고 왜 더 나은지 정리해 보겠습니다.절차 지향과 객체 지향, 무엇이 다른가프로그래밍 방식은 크게 절차 지향과 객체 지향으로 나눌 수 있습니다. 흔히 대립 개념처럼 말하지만, 사실 어디에 초점을 두느냐의 차이입니다.구분초점데이터와 기능의 관계절차 지향"어떻게" 실행 순서대로 처리할까데이터와 처리 기능이 분리되어 있다객체 지향"무엇을" 객체로 보고 상호작용시킬까데이터와 행동이 하나의 객체 안에 함께 있다가장 중요한 차이를 한 문장으로 말하면..