ํด๋์ค(Class)์ ๊ฐ์ฒด(Object)๋ Java์ ํต์ฌ ๊ฐ๋ ์ผ๋ก, ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์ ๊ธฐ๋ณธ ์์์ ๋๋ค. ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ค ์ธ๊ณ์ ์ฌ๋ฌผ์ ์ฝ๋๋ก ํํํ ์ ์์ผ๋ฉฐ, ๊ฐ์ฒด๋ ์ด๋ฌํ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ์ธ์คํด์ค์ ๋๋ค. ์ด๋ฒ ๊ธ์์๋ ํด๋์ค์ ๊ฐ์ฒด์ ๊ฐ๋ , ๊ตฌํ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ํ์ฉ ์์ ๋ฅผ ํตํด Java ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ์ด๋ฅผ ๋ค์ ธ๋ณด๊ฒ ์ต๋๋ค.
1. ํด๋์ค๋ ๋ฌด์์ธ๊ฐ?
ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ฒญ์ฌ์ง(Template)์ ๋๋ค. ํด๋์ค๋ ๊ฐ์ฒด์ ์์ฑ(Attributes)๊ณผ ๋์(Behavior)์ ์ ์ํ๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
ํด๋์ค์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
class ClassName {
// ์์ฑ (ํ๋)
๋ฐ์ดํฐํ์
๋ณ์๋ช
;
// ๋์ (๋ฉ์๋)
๋ฐํํ์
๋ฉ์๋๋ช
() {
// ๋ฉ์๋ ๋ด์ฉ
}
}
2. ๊ฐ์ฒด๋ ๋ฌด์์ธ๊ฐ?
๊ฐ์ฒด๋ ํด๋์ค์์ ์์ฑ๋ ์ธ์คํด์ค(Instance)๋ก, ํด๋์ค์ ์ ์๋ ์์ฑ๊ณผ ๋์์ ์ค์ ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Car
๋ผ๋ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๋ฌ ๋์ ์๋์ฐจ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๊ฐ์ฒด ์์ฑ
ClassName objectName = new ClassName();
์ ์ฝ๋์์ new
ํค์๋๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉฐ, ์ด ๊ฐ์ฒด๋ ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
3. ํด๋์ค์ ๊ฐ์ฒด์ ์์
๋ค์์ ํด๋์ค๋ฅผ ์ ์ํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ธฐ๋ณธ์ ์ธ ์์ ์ ๋๋ค.
์์ : ์๋์ฐจ ํด๋์ค
class Car {
// ์์ฑ
String brand;
int speed;
// ๋์
public void drive() {
System.out.println(brand + "๊ฐ " + speed + "km/h๋ก ๋ฌ๋ฆฝ๋๋ค.");
}
}
public class Main {
public static void main(String[] args) {
// ๊ฐ์ฒด ์์ฑ
Car myCar = new Car();
myCar.brand = "Tesla";
myCar.speed = 150;
myCar.drive();
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
Tesla๊ฐ 150km/h๋ก ๋ฌ๋ฆฝ๋๋ค.
์ ์ฝ๋์์ Car
ํด๋์ค๋ brand
์ speed
์์ฑ์ ์ ์ํ๋ฉฐ, drive
๋ฉ์๋๋ฅผ ํตํด ๋์์ ์ํํฉ๋๋ค.
4. ํด๋์ค์ ์ฃผ์ ๊ตฌ์ฑ ์์
4.1 ํ๋ (Fields)
ํ๋๋ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ณ์๋ก, ํด๋์ค ๋ด๋ถ์์ ์ ์ธ๋ฉ๋๋ค.
class Person {
String name;
int age;
}
4.2 ๋ฉ์๋ (Methods)
๋ฉ์๋๋ ๊ฐ์ฒด๊ฐ ์ํํ ๋์์ ์ ์ํฉ๋๋ค. ํด๋์ค ๋ด์ ์ ์ธ๋๋ฉฐ, ์์ฑ์ ์กฐ์ํ๊ฑฐ๋ ํน์ ์์ ์ ์ํํฉ๋๋ค.
class Calculator {
public int add(int a, int b) {
return a + b;
}
}
4.3 ์์ฑ์ (Constructors)
์์ฑ์๋ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๋ ํน๋ณํ ๋ฉ์๋๋ก, ํด๋์ค์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง๋๋ค. ์์ฑ์๋ ๊ฐ์ฒด ์์ฑ ์ ์๋์ผ๋ก ํธ์ถ๋ฉ๋๋ค.
class Car {
String brand;
// ์์ฑ์
public Car(String brand) {
this.brand = brand;
}
public void displayBrand() {
System.out.println("๋ธ๋๋: " + brand);
}
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car("Hyundai");
myCar.displayBrand();
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
๋ธ๋๋: Hyundai
5. ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ
Java์์ ๊ฐ์ฒด๋ ํ ๋ฉ๋ชจ๋ฆฌ(Heap Memory)์ ์ ์ฅ๋๋ฉฐ, ๊ฐ์ฒด์ ์ฐธ์กฐ๋ ์คํ ๋ฉ๋ชจ๋ฆฌ(Stack Memory)์ ์ ์ฅ๋ฉ๋๋ค. new
ํค์๋๋ฅผ ํตํด ์์ฑ๋ ๊ฐ์ฒด๋ ๋ฉ๋ชจ๋ฆฌ ์์์ ์๋ก ๋
๋ฆฝ์ ์ผ๋ก ์กด์ฌํฉ๋๋ค.
์์ : ๋ ๊ฐ์ฒด ๋น๊ต
class Book {
String title;
}
public class Main {
public static void main(String[] args) {
Book book1 = new Book();
book1.title = "Java Programming";
Book book2 = new Book();
book2.title = "Java Programming";
System.out.println(book1 == book2); // false (์๋ก ๋ค๋ฅธ ๊ฐ์ฒด)
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
false
์ ์ฝ๋์์ book1
๊ณผ book2
๋ ๋์ผํ ๋ด์ฉ์ ๊ฐ์ก์ง๋ง, ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์์น์ ์ ์ฅ๋ ๋ณ๊ฐ์ ๊ฐ์ฒด์
๋๋ค.
6. ์ค์ํ ์์
6.1 ํ์ ๊ด๋ฆฌ ์์คํ
ํ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์์ต๋๋ค.
class Student {
String name;
int age;
public void displayInfo() {
System.out.println("์ด๋ฆ: " + name + ", ๋์ด: " + age);
}
}
public class Main {
public static void main(String[] args) {
Student student1 = new Student();
student1.name = "ํ๊ธธ๋";
student1.age = 20;
student1.displayInfo();
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
์ด๋ฆ: ํ๊ธธ๋, ๋์ด: 20
7. ํด๋์ค์ ๊ฐ์ฒด ์ฌ์ฉ ์ ์ฃผ์์ฌํญ
- ์บก์ํ: ํ๋๋ฅผ
private
๋ก ์ ์ธํ๊ณgetter
์setter
๋ฉ์๋๋ฅผ ํตํด ์ ๊ทผ ๊ถํ์ ์ ์ดํ์ธ์. - ์ฌ์ฌ์ฉ์ฑ: ํด๋์ค๋ฅผ ์ค๊ณํ ๋, ์ฌ๋ฌ ๊ฐ์ฒด๊ฐ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์ผ๋ฐํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ: ํ์ ์๋ ๊ฐ์ฒด๋
null
๋ก ์ค์ ํด ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ ๊ฑฐํ๋๋ก ์ ๋ํ์ธ์.
๊ฒฐ๋ก
Java์์ ํด๋์ค์ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ์ ๊ธฐ๋ณธ ๋จ์๋ก, ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ฌ์ค๋๋ค. ํด๋์ค๋ ์์ฑ๊ณผ ๋์์ ์ ์ํ๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ฒ ๊ธ์์ ์๊ฐํ ์์ ์ ๊ฐ๋ ์ ๋ฐํ์ผ๋ก Java ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ํ์ฉํด ๋ค์ํ ํ๋ก๊ทธ๋จ์ ์์ฑํด ๋ณด์ธ์!
๋๊ธ ์ฐ๊ธฐ