
Java를 처음 배우면서 가장 이해하기 힘들었던 개념이 객체(지향)이었다.
오늘은 그 객체와 더불어 java의 class에 대한 정리도 같이 하기로 했다.
객체(Object)는 쉽게 말해 현실 세계의 사물이나 개념을 코드로 표현한 것이다.
예를 들어, 여러분 앞에 스마트폰이 있다고 생각해보자. 이 스마트폰은:
프로그래밍에서 객체도 마찬가지다. 객체는 데이터(속성)와 그 데이터를 처리하는 메서드(동작)를 하나로 묶어놓은 것이다.
중요한 점은, 한 번 생성된 객체는 메모리 상에 실체로서 존재하게 되고, 프로그램 어디서든 그 객체를 불러내서 재사용할 수 있다는 것이다. 이게 바로 객체의 핵심이다.
클래스는 객체를 만들기 위한 설계도 또는 틀이라고 생각하면 된다.
붕어빵을 만든다고 생각해보자:
하나의 틀(클래스)로 여러 개의 붕어빵(객체)을 찍어낼 수 있는 것처럼, 하나의 클래스로 여러 개의 객체를 만들 수 있다.
public class Smartphone {
// 속성 (필드, 멤버 변수)
String brand; // 브랜드
String model; // 모델명
String color; // 색상
// 동작 (메서드)
void call(String number) {
System.out.println(number + "로 전화를 겁니다.");
}
void sendMessage(String message) {
System.out.println("메시지 전송: " + message);
}
}
public class Main {
public static void main(String[] args) {
// 객체 생성 (인스턴스화) - 이 순간 메모리에 실체가 만들어진다!
Smartphone myPhone = new Smartphone();
// 속성에 값 할당
myPhone.brand = "Samsung";
myPhone.model = "Galaxy S24";
myPhone.color = "Black";
// 이제 이 객체(myPhone)를 언제든지 불러서 사용할 수 있다
myPhone.call("010-1234-5678");
myPhone.sendMessage("안녕하세요!");
// 다른 메서드에서도 사용 가능
usePhone(myPhone);
// 또 다른 객체 생성 - 완전히 별개의 실체
Smartphone friendPhone = new Smartphone();
friendPhone.brand = "Apple";
friendPhone.model = "iPhone 15";
friendPhone.color = "White";
// 같은 클래스로 만들었지만 서로 다른 객체!
// myPhone과 friendPhone은 각각 독립적으로 존재한다
System.out.println("내 폰: " + myPhone.model);
System.out.println("친구 폰: " + friendPhone.model);
}
// 다른 메서드에서도 객체를 전달받아 사용 가능!
static void usePhone(Smartphone phone) {
phone.sendMessage("다른 메서드에서도 사용 가능!");
}
}
매번 속성을 하나씩 설정하기 번거로우니, 생성자를 사용하면 객체를 만들 때 바로 값을 넣을 수 있다.
public class Smartphone {
String brand;
String model;
int battery;
String color;
// 생성자
public Smartphone(String brand, String model, String color) {
this.brand = brand;
this.model = model;
this.color = color;
this.battery = 100; // 초기 배터리는 100%
}
void call(String number) {
System.out.println(number + "로 전화를 겁니다.");
}
}
// 사용 예시
Smartphone myPhone = new Smartphone("Samsung", "Galaxy S24", "Black");
한 번 만든 클래스를 여러 곳에서 재사용할 수 있다.
관련된 데이터와 기능이 하나로 묶여있어 수정이 쉽다.
실제 세계의 사물을 코드로 표현하니까 이해하기 쉽다.
팀원들과 역할을 나눠서 각자 다른 클래스를 개발할 수 있다.
처음에는 “왜 굳이 이렇게 복잡하게?”라는 생각이 들 수 있다.
나도 그랬다. 하지만 프로그램의 규모가 커질수록, 그리고 실제 프로젝트를 해보면 객체지향의 필요성과 편리함을 자연스럽게 느끼게 된다.
핵심은 "관련된 것들을 하나로 묶는다"는 것이다.
스마트폰 관련 정보와 기능을 Smartphone 클래스 하나에 모아두면, 나중에 찾기도 쉽고 관리하기도 편하다.