
김영한의 '실전 JAVA' 1강: 클래스, 다시 첫 걸음 떼기 👣
오랜만에 책상에 앉아 코드를 다시 마주합니다. 비전공자 직장인으로서 업무와는 거리가 멀었던 자바를 다시 시작하며, 김영한 님의 '실전 자바' 강의를 택했습니다. 첫 강의의 주제는 자바의 가장 기본적인 구성 요소인 클래스(Class)였습니다.
잊고 지냈던 개념들을 다시 복기하며, 단순한 지식을 넘어 실제 프로그램을 설계하는 관점을 다시 한번 복기해보도록 하겠습니다.
1. 클래스: 현실 세계의 '설계도'와 '틀' 📐
클래스를 해당 강의에선 이해하기 쉽게 두 가지 비유로 설명합니다.
- 현실 세계의 '설계도': 우리가 집을 짓거나 자동차를 만들 때, 먼저 설계도를 그립니다. 이 설계도에는 어떤 재료를 쓸지, 어떤 구조로 만들지 등 모든 정보가 담겨 있죠. 자바에서 클래스가 바로 이 설계도와 같은 역할을 합니다. Car라는 클래스에는 '색상', '속도'와 같은 자동차의 속성(변수)과 '달린다', '멈춘다'와 같은 기능(메서드)이 정의됩니다. 이 설계도만 있으면, 수많은 자동차를 동일한 형태로 찍어낼 수 있습니다.
- 데이터를 담는 '틀': 클래스는 단순한 기능의 나열이 아닌, 서로 관련된 데이터와 기능을 한데 묶어 관리하는 틀이기도 합니다. 예를 들어, 회원 정보를 관리한다고 가정해 봅시다. 회원의 '이름', '나이', '이메일'은 모두 밀접하게 연관된 데이터입니다. 이 데이터들을 따로따로 관리하면 매우 비효율적이죠. Member라는 클래스를 만들어 이 세 가지 정보를 한곳에 담아두면, 훨씬 간결하고 체계적으로 데이터를 다룰 수 있습니다.
2. 객체와 인스턴스, 이제 헷갈리지 마세요! 🧐
자바를 처음 배울 때 가장 헷갈리는 개념이 바로 객체(Object)와 인스턴스(Instance)입니다.
- 객체(Object): 클래스로부터 만들어진 모든 대상을 가리키는 포괄적이고 일반적인 용어입니다.
'자동차'라는 추상적인 개념 자체를 의미한다고 볼 수 있습니다. - 인스턴스(Instance): 특정 클래스로부터 생성된 구체적인 실체를 의미합니다. 예를 들어, new Car()를 통해 만들어진 '빨간색 스포츠카'는 'Car 클래스의 인스턴스'가 됩니다. 인스턴스는 메모리에 실제로 할당된 실체를 의미하며, 인스턴스마다 고유한 값을 가질 수 있습니다.
Car car1 = new Car();라는 코드는 Car라는 설계도(클래스)를 바탕으로 new 키워드를 사용해 메모리에 실제 자동차(인스턴스)를 생성하고, 그 인스턴스를 car1이라는 변수가 가리키도록 하는 과정입니다. 여기서 car1은 참조 변수이며, 실제 객체는 메모리의 어딘가에 저장되어 있습니다. 마치 '내 차가 주차된 주차장 번호'를 기억하고 있는 것과 같습니다.
3. 변수의 종류: '멤버 변수' vs. '지역 변수' 🗺️
자바에서는 변수가 선언된 위치에 따라 그 성격이 완전히 달라집니다. 이 차이를 명확히 아는 것이 향후 발생할 오류를 줄이는 데 큰 도움이 됩니다.
- 멤버 변수 (Member Variable): 클래스 내부에 선언된 변수로, 클래스의 속성을 담당합니다. 이 변수들은 클래스 내부의 모든 메서드에서 접근할 수 있습니다. 가장 중요한 특징은 자동으로 초기화된다는 점입니다. int 타입은 0, boolean 타입은 false, 객체 타입은 null 등으로 기본값이 할당되죠.
- 지역 변수 (Local Variable): 메서드 내부에 선언된 변수로, 해당 메서드 안에서만 유효합니다. 메서드 호출이 끝나면 메모리에서 사라집니다. 가장 중요한 특징은 반드시 직접 초기화해야만 사용할 수 있다는 점입니다. 초기화하지 않고 사용하려 들면 컴파일 에러가 발생합니다.
지역 변수는 메서드가 끝나는 즉시 메모리에서 사라지므로, 사용하려는 시점에 값이 존재하지 않을 수 있다. 따라서 반드시 초기화해야합니다. 이 차이를 인지하는 것만으로도 실수를 방지할 수 있습니다.
실제로 코드로 만들어보기 💻
이제 이 개념들을 코드로 어떻게 구현하는지 살펴볼게요. Student라는 클래스를 만들고, 학생 객체들을 생성해볼까요?
1. 변수 선언: 붕어빵을 담을 그릇 만들기
Student student1;
이 코드는 student1이라는 변수(그릇)를 만들겠다는 뜻이에요. 이 그릇에는 Student 타입의 객체만 담을 수 있어요. 마치 int 변수가 정수만 담는 것처럼요.
2. 객체 생성: 붕어빵 만들기
student1 = new Student();
이 부분이 바로 붕어빵 틀(Student 클래스)로 실제 붕어빵(객체)을 만드는 과정이에요. new 키워드는 "새로운 객체를 만들어!"라고 명령하는 마법의 주문이랍니다. 이렇게 객체를 만들면, 자바는 그 객체가 메모리 어디에 있는지 알려주는 참조값(주소)을 반환해줘요.
3. 참조값 보관: 붕어빵에 이름표 붙이기
Student student1 = new Student();
이 코드를 한 번에 실행하면, new Student()로 만들어진 객체의 주소값(x001이라고 가정해볼게요)이 student1 변수에 저장돼요. 이제 student1이라는 이름으로 이 주소에 있는 객체에 접근할 수 있게 된 거죠.
4. 객체 사용: 붕어빵에 속성 채우기
student1.name = "학생1"; student1.age = 15; student1.grade = 90;
이제 student1 변수에 있는 주소값으로 실제 객체에 찾아가서 값을 채워 넣을 수 있어요. 변수 이름 뒤에 . (점)을 찍으면 해당 객체의 속성에 접근할 수 있답니다.
마치 student1이라는 이름표를 보고, '이 붕어빵의 속 재료는 팥이야!'라고 정해주는 것과 같아요.
메모리에서 객체 들여다보기 🧠
우리가 만든 객체들이 메모리에서 어떻게 저장되는지 궁금하시죠?
Student student1 = new Student(); Student student2 = new Student();
위 코드를 실행하면, 메모리에는 두 개의 독립적인 Student 객체가 만들어져요. student1은 x001이라는 주소에,
student2는 x002라는 또 다른 주소에 저장되죠. 서로 주소값이 다르기 때문에 student1에 값을 넣는다고 student2의 값이 바뀌지 않아요.
코드로 직접 확인해볼까요? System.out.println(student1); System.out.println(student2);
출력 결과: class1.Student@7a81197d
class1.Student@2f2c9b19
보이시나요? @ 뒤에 있는 이상한 숫자들이 바로 객체의 고유한 주소값이에요. 이렇게 주소값이 다르기 때문에 두 객체는 서로 다른 존재로 인식된답니다.
정리: 핵심만 콕! 🎯
오늘 배운 내용을 한 문장으로 정리해 드릴게요.
클래스는 객체를 만들기 위한 설계도이고, 이 설계도를 기반으로 실제로 만들어진 실체를 객체 또는 인스턴스라고 부릅니다.
첫걸음의 중요성: 다시 시작하는 의미 ✨
바쁜 업무에 치이다 보면 자바의 기초 개념들은 쉽게 잊혀집니다. 하지만 1강을 들으며 다시 한번 깨달았습니다. 탄탄한 기초 위에 견고한 건물이 세워지듯, 명확한 기초 개념이 있어야 복잡한 프로그램을 만들 수 있다는 것을요. 클래스에 대한 깊이 있는 이해는 단순히 코딩을 넘어, 객체지향이라는 거대한 설계를 이해할 수 있는 첫걸음입니다.
이 작은 공부가 결국 비즈니스 문제를 해결하고, 반복적인 업무를 자동화하는 데 필요한 논리적 사고의 밑거름이 될 것입니다.
저처럼 비전공자이신 분들도 김영한 님의 강의를 통해 자바의 세계를 다시 만나보시길 강력히 추천합니다.
이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗
https://inf.run/b1SMF
'[ BACKEND] > JAVA_인프런(김영한)' 카테고리의 다른 글
| [JAVA_인프런] 2. 배열의 도입 (0) | 2025.09.03 |
|---|---|
| [JAVA_인프런] JAVA를 다시 시작해보자 (3) | 2025.08.27 |