Java๋ ๋ํ์ ์ธ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programming, OOP) ์ธ์ด์ ๋๋ค. OOP๋ ์ฝ๋๋ฅผ ๊ฐ์ฒด(object)๋ก ๊ตฌ์กฐํํ์ฌ ํ์ค ์ธ๊ณ์ ๋ฌธ์ ๋ฅผ ๋ ์ง๊ด์ ์ด๊ณ ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋๋ก ๋์์ค๋๋ค. ์ด๋ฒ ๊ธ์์๋ OOP์ ๊ธฐ๋ณธ ๊ฐ๋ , Java์์์ ๊ตฌํ, ๊ทธ๋ฆฌ๊ณ ์ค์ํ์ ํ์ฉ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)๋?
OOP๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ผ๋ ๋จ์๋ก ๋๋๊ณ , ์ด ๊ฐ์ฒด๋ค์ด ์๋ก ์ํธ์์ฉํ๋ฉฐ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋๋ค. ๊ฐ์ฒด๋ ์์ฑ(Attributes)๊ณผ ๋์(Methods)์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ด๋ฌํ ๊ฐ์ฒด๋ฅผ ์กฐํฉํ์ฌ ๋ณต์กํ ์์คํ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
OOP์ ์ฃผ์ ํน์ง
- ์บก์ํ(Encapsulation): ๋ฐ์ดํฐ์ ๋ฉ์๋๋ฅผ ํ๋์ ๊ฐ์ฒด๋ก ๋ฌถ๊ณ , ์ธ๋ถ์์์ ์ง์ ์ ๊ทผ์ ์ ํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํฉ๋๋ค.
- ์์(Inheritance): ๊ธฐ์กด ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์๋ก์ด ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ ๋๋ค.
- ๋คํ์ฑ(Polymorphism): ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๊ฐ ๋ค๋ฅธ ๋์์ ํ๋๋ก ์ ์ํ ์ ์์ต๋๋ค.
- ์ถ์ํ(Abstraction): ๋ณต์กํ ์์คํ ์ ๋จ์ํํ์ฌ ํ์ํ ๋ถ๋ถ๋ง ๋ณด์ฌ์ค๋๋ค.
2. Java์์์ OOP ๊ตฌํ
2.1 ํด๋์ค์ ๊ฐ์ฒด
ํด๋์ค(Class)๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ฒญ์ฌ์ง์ด๋ฉฐ, ๊ฐ์ฒด(Object)๋ ํด๋์ค์์ ์์ฑ๋ ์ธ์คํด์ค์ ๋๋ค.
์์ : ํด๋์ค์ ๊ฐ์ฒด
public class Car {
// ์์ฑ(Attributes)
String brand;
int speed;
// ๋์(Methods)
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 = "BMW";
myCar.speed = 120;
myCar.drive();
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
BMW๊ฐ 120km/h๋ก ๋ฌ๋ฆฝ๋๋ค.
3. OOP์ ์ฃผ์ ๊ฐ๋ ๊ณผ ์์
3.1 ์บก์ํ(Encapsulation)
์บก์ํ๋ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ ํํ์ฌ ์ธ๋ถ๋ก๋ถํฐ ๊ฐ์ฒด์ ์์ฑ์ ๋ณดํธํฉ๋๋ค. private
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ์ ์๋ํ๊ณ , getter
์ setter
๋ฉ์๋๋ฅผ ํตํด ์ ๊ทผํฉ๋๋ค.
public class Person {
private String name; // ์๋๋ ์์ฑ
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String name) {
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setName("ํ๊ธธ๋");
System.out.println("์ด๋ฆ: " + person.getName());
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
์ด๋ฆ: ํ๊ธธ๋
3.2 ์์(Inheritance)
์์์ ๊ธฐ์กด ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์๋ก์ด ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ๋ ๊ธฐ๋ฅ์ ๋๋ค.
class Animal {
public void eat() {
System.out.println("๋๋ฌผ์ด ๋จน์ต๋๋ค.");
}
}
class Dog extends Animal {
public void bark() {
System.out.println("๊ฐ๊ฐ ์ง์ต๋๋ค.");
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.eat(); // ์์๋ ๋ฉ์๋
myDog.bark(); // Dog ํด๋์ค์ ๋ฉ์๋
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
๋๋ฌผ์ด ๋จน์ต๋๋ค.
๊ฐ๊ฐ ์ง์ต๋๋ค.
3.3 ๋คํ์ฑ(Polymorphism)
๋คํ์ฑ์ ํ๋์ ๋ฉ์๋๊ฐ ์ฌ๋ฌ ํด๋์ค์์ ์๋ก ๋ค๋ฅด๊ฒ ๋์ํ๋๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
class Animal {
public void sound() {
System.out.println("๋๋ฌผ์ด ์๋ฆฌ๋ฅผ ๋
๋๋ค.");
}
}
class Cat extends Animal {
@Override
public void sound() {
System.out.println("๊ณ ์์ด๊ฐ ์ผ์น ํฉ๋๋ค.");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("๊ฐ๊ฐ ๋ฉ๋ฉ ํฉ๋๋ค.");
}
}
public class Main {
public static void main(String[] args) {
Animal myCat = new Cat();
Animal myDog = new Dog();
myCat.sound(); // Cat์ sound() ํธ์ถ
myDog.sound(); // Dog์ sound() ํธ์ถ
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
๊ณ ์์ด๊ฐ ์ผ์น ํฉ๋๋ค.
๊ฐ๊ฐ ๋ฉ๋ฉ ํฉ๋๋ค.
3.4 ์ถ์ํ(Abstraction)
์ถ์ํ๋ ๋ณต์กํ ์์คํ
์ ์ผ๋ถ๋ง ๋
ธ์ถํ์ฌ ์ค์ํ ์ ๋ณด๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ํํํฉ๋๋ค. ์ด๋ฅผ ์ํด abstract
ํค์๋๋ฅผ ์ฌ์ฉํด ์ถ์ ํด๋์ค๋ฅผ ์ ์ํฉ๋๋ค.
abstract class Shape {
abstract void draw(); // ์ถ์ ๋ฉ์๋
}
class Circle extends Shape {
@Override
void draw() {
System.out.println("์์ ๊ทธ๋ฆฝ๋๋ค.");
}
}
class Rectangle extends Shape {
@Override
void draw() {
System.out.println("์ฌ๊ฐํ์ ๊ทธ๋ฆฝ๋๋ค.");
}
}
public class Main {
public static void main(String[] args) {
Shape circle = new Circle();
Shape rectangle = new Rectangle();
circle.draw();
rectangle.draw();
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
์์ ๊ทธ๋ฆฝ๋๋ค.
์ฌ๊ฐํ์ ๊ทธ๋ฆฝ๋๋ค.
4. OOP์ ์ฅ์
- ์ฝ๋ ์ฌ์ฌ์ฉ: ์์์ ํตํด ๊ธฐ์กด ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ ์๊ฐ์ ๋จ์ถํฉ๋๋ค.
- ์ ์ง๋ณด์ ์ฉ์ด: ์ฝ๋ ๊ตฌ์กฐ๊ฐ ๋ช ํํ์ฌ ์ ์ง๋ณด์์ ํ์ฅ์ด ์ฉ์ดํฉ๋๋ค.
- ์บก์ํ๋ฅผ ํตํ ๋ณด์: ๋ฐ์ดํฐ ์๋์ผ๋ก ์ธ๋ถ ์ ๊ทผ์ ์ ํํ์ฌ ๋ฐ์ดํฐ ๋ณดํธ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ๋คํ์ฑ: ๋ค์ํ ๊ฐ์ฒด๋ฅผ ๋์ผํ ์ธํฐํ์ด์ค๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
Java์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ์ค ์ธ๊ณ์ ๋ฌธ์ ๋ฅผ ์ฝ๋๋ก ํจ์จ์ ์ผ๋ก ๋ชจ๋ธ๋งํ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. OOP์ ์ฃผ์ ๊ฐ๋ ์ธ ํด๋์ค์ ๊ฐ์ฒด, ์บก์ํ, ์์, ๋คํ์ฑ, ์ถ์ํ๋ฅผ ์ดํดํ๊ณ ํ์ฉํ๋ฉด ๋์ฑ ๊ตฌ์กฐ์ ์ด๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ฒ ๊ธ์ ๋ฐํ์ผ๋ก OOP ๊ฐ๋ ์ ์ ์ฉํด ๋ค์ํ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด ๋ณด์ธ์!
๋๊ธ ์ฐ๊ธฐ