객체를 만들기 위한 설계도(blueprint).
예: 자동차 설계도 = 클래스
실제로 도로 위에 있는 자동차 한 대 = 객체
클래스로부터 생성된 실체(instance).
객체는 속성(필드)과 기능(메서드)을 가짐
class Person {
String name; // 속성(필드)
int age;
void sayHello() { // 기능(메서드)
System.out.println("Hello, my name is " + name);
}
}
public class Main {
public static void main(String[] args) {
Person p = new Person(); // 객체 생성
p.name = "Tom";
p.age = 20;
p.sayHello();
}
}
✔ 출력
Hello, my name is Tom
객체가 생성될 때 자동으로 호출되는 메서드.
클래스 이름과 동일해야 함
반환 타입 없음 (void도 X)
객체 초기화 목적
여러 개 만들 수 있음 (오버로딩 가능)
📌 예제 — 생성자 사용
class Car {
String model;
int year;
// 생성자
Car(String model, int year) {
this.model = model;
this.year = year;
}
}
public class Main {
public static void main(String[] args) {
Car c = new Car("Avante", 2020);
System.out.println(c.model + ", " + c.year);
}
}
✔ this.model = 이 클래스의 model
✔ 생성자로 바로 초기화 가능
같은 이름의 메서드를
매개변수 개수 or 타입이 다르게 여러 개 정의하는 것.
class MathUtil {
int add(int a, int b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
MathUtil m = new MathUtil();
System.out.println(m.add(3, 5)); // 8
System.out.println(m.add(3, 5, 7)); // 15
System.out.println(m.add(2.5, 3.2)); // 5.7
}
}
🔹 1) 캡슐화(Encapsulation)
데이터를 보호하기 위해
필드(private) + getter/setter를 사용.
🔹 2) 추상화(Abstraction)
복잡한 것은 숨기고
필요한 것만 보여주기.
📌 간단 예제 — 캡슐화
class BankAccount {
private int balance; // 외부 접근 불가
public void deposit(int money) {
balance += money;
}
public int getBalance() {
return balance;
}
}
class Student {
String name;
int grade;
void printInfo() {
System.out.println(name + " / " + grade);
}
}
public class Main {
public static void main(String[] args) {
Student s = new Student();
s.name = "Jin";
s.grade = 3;
s.printInfo();
}
}
=> Jin / 3
- 반환 타입을 반드시 가져야 한다 X
- 클래스 이름과 동일해야 한다 O
- 생성자는 하나만 존재해야 한다 X
- 생성자를 만들지 않으면 객체 생성이 불가능하다 X
메서드 이름이 달라야 한다 X
매개변수 개수나 타입이 달라야 한다 O
반환 타입이 다르면 된다 X
static 메서드에서만 가능하다 X
class Box {
int size;
Box() {
size = 10;
}
Box(int s) {
size = s;
}
}
public class Main {
public static void main(String[] args) {
Box b1 = new Box();
Box b2 = new Box(20);
System.out.println(b1.size + " / " + b2.size);
}
}
=> 10 / 20