๋ฐ์ํ
SMALL
๐กOOP๋ ์๋ฐ์ ์ฃผ์ ํน์ง ์ค ํ๋๋ก ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ผ๋ ๋จ์๋ก ๋๋์ด ๊ฐ๋ฐํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ด๋ค.
์ฌ๊ธฐ์ ๊ฐ์ฒด๋ ๋ฐ์ดํฐ(์์ฑ)๊ณผ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ํจ์(๋์)์ ํ๋๋ก ๋ฌถ์ด ๋๋ ๊ฒ์ ๋งํ๋ค. ์๋ฅผ ๋ค์ด ์๋์ฐจ๋ฅผ ๊ฐ์ฒด๋ก ๋๋ฉด ๋ฐ์ดํฐ๋ ์๋์ฐจ์ ์์, ๋ธ๋๋, ์๋ ๋ฑ์ด๋ฉฐ ํจ์๋ ์ถ๋ฐํ๋ค(), ๋ฉ์ถ๋ค() ๊ฐ์ ๋์๋ค์ด ์๋ค.
oop์ 4๋ ํต์ฌ ํน์ง
1. ์บก์ํ(Encapsulation): ๋ฐ์ดํฐ์ ํจ์๋ฅผ ํ๋์ ๋จ์(๊ฐ์ฒด)๋ก ๋ฌถ๊ณ , ์ธ๋ถ์์๋ ํ์ํ ๋ถ๋ถ๋ง ์ ๊ทผํ๋๋ก ๋ณดํธํ๋ ๊ฒ
// ์บก์ํ ์์
class BankAccount {
private double balance; // ์ธ๋ถ์์ ์ง์ ์ ๊ทผ ๋ถ๊ฐ
public BankAccount(double initialBalance) {
balance = initialBalance;
}
// ์ธ๋ถ์์๋ ๋ฉ์๋๋ฅผ ํตํด์๋ง balance ์ ๊ทผ ๊ฐ๋ฅ
public void deposit(double amount) {
balance += amount;
}
public void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
} else {
System.out.println("์์ก ๋ถ์กฑ");
}
}
public double getBalance() {
return balance;
}
}
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount(1000);
account.deposit(500);
account.withdraw(300);
System.out.println("ํ์ฌ ์์ก: " + account.getBalance());
}
}
ํ์ฌ ์์ก: 1200.0
2. ์์(Inheritance): ๋ถ๋ชจ ๊ฐ์ฒด์ ์์ฑ๊ณผ ๋์์ ์์ ๊ฐ์ฒด๊ฐ ๋ฌผ๋ ค๋ฐ์ ์ฌ์ฌ์ฉ ํ ์ ์๋ ๊ฒ
// ๋ถ๋ชจ ํด๋์ค
class Animal {
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) {
Dog dog = new Dog();
dog.sound();
}
}
๋ฉ๋ฉ
3. ๋คํ์ฑ(Polymorphism): ๊ฐ์ ํจ์ ์ด๋ฆ์ด๋ผ๋ ๊ฐ์ฒด์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์ํ๋๋ก ๋ง๋๋ ๊ฒ
class Animal {
public void sound() {
System.out.println("๋๋ฌผ์ด ์๋ฆฌ๋ฅผ ๋ธ๋ค");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("๋ฉ๋ฉ");
}
}
class Cat extends Animal {
@Override
public void sound() {
System.out.println("์ผ์น");
}
}
public class Main {
public static void main(String[] args) {
Animal animal;
animal = new Dog();
animal.sound(); // ๋คํ์ฑ ์ ์ฉ - Dog
animal = new Cat();
animal.sound(); // ๋คํ์ฑ ์ ์ฉ - Cat
}
}
๋ฉ๋ฉ
์ผ์น
4. ์ถ์ํ(Abstraction): ๊ผญ ํ์ํ ์ ๋ณด๋ง ๊ณต๊ฐํ๊ณ , ์ธ๋ถ์ฌํญ์ ์จ๊ธฐ๋ ๊ฒ
abstract class Animal {
abstract void sound();
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("๋ฉ๋ฉ");
}
}
class Cat extends Animal {
@Override
void sound() {
System.out.println("์ผ์น");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.sound();
Animal cat = new Cat();
cat.sound();
}
}
๋ฉ๋ฉ
์ผ์น
oop๋ฅผ ํ์ฉํ๋ฉด ์ข์์
1. ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๋ค.
2. ํ์ฅ์ฑ์ด ์ข์์ง๋ค.
3. ํ์ ์ ์ ๋ฆฌํ๋ค.
์ ์ฐจ ์งํฅ ํ๋ก๊ทธ๋๋ฐ vs ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์์๋๋ก ์คํ๋๋ ์ ์ฐจ ์ค์ฌ์ผ๋ก ์ด๋ฃจ์ด์ง ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ด๋ค.
ํญ๋ชฉ | ์ ์ฐจ ์งํฅ ํ๋ก๊ทธ๋๋ฐ (Procedural Programming) | ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (OOP) |
๊ธฐ๋ฐ | ํจ์(์ ์ฐจ, ํ๋ก์ธ์ค)๋ฅผ ์ค์ฌ์ผ๋ก ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑ | ๊ฐ์ฒด(๋ฐ์ดํฐ+ํจ์)๋ฅผ ์ค์ฌ์ผ๋ก ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑ |
๊ตฌ์กฐ | ์์ฐจ์ ์ธ ํ๋ฆ์ ๋ง์ถฐ ํจ์๋ค์ ํธ์ถํ๋ฉฐ ์ฒ๋ฆฌ | ๊ฐ์ฒด ๊ฐ์ ์ํธ์์ฉ์ผ๋ก ๋์ |
์ฝ๋ ์ฌ์ฌ์ฉ์ฑ | ์ฝ๋ ์ฌ์ฌ์ฉ์ด ์๋์ ์ผ๋ก ์ด๋ ค์(๊ฐ์ ๊ธฐ๋ฅ์ด๋ผ๋ ๋ฐ๋ณต ์์ฑ ๊ฐ๋ฅ์ฑ) | ์์, ์บก์ํ ๋ฑ์ ํตํด ์ฌ์ฌ์ฉ์ฑ์ด ๋์ |
์ ์ง๋ณด์ | ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ์ ์ง๋ณด์ ์ด๋ ค์(์คํ๊ฒํฐ ์ฝ๋ ๋ฐ์ ๊ฐ๋ฅ์ฑ) | ๊ตฌ์กฐ๊ฐ ๋ช ํํด ์ ์ง๋ณด์๊ฐ ์๋์ ์ผ๋ก ์ฌ์ |
๋ํ ์ธ์ด | C. Pascal๋ฑ | Java, C++ ๋ฑ |
์์ | ๋ ์ํผ(์์๋๋ก ๋จ๊ณ ์คํ) | ์๋์ฐจ(์์ฑ: ์์, ๋ชจ๋ธ/ ๊ธฐ๋ฅ: ์ด์ , ์ ์ง) |
์ ์ฐจ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์์ ์ฝ๋
// ์ ์ฐจ ์งํฅ ์ฝ๋ - ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํ๊ณ , ํจ์๋ก ์ฒ๋ฆฌ
public class Main {
public static void main(String[] args) {
String[] names = {"์ฒ ์", "์ํฌ", "๋ฏผ์"};
int[] ages = {25, 23, 30};
String[] jobs = {"๊ฐ๋ฐ์", "๋์์ด๋", "PM"};
for (int i = 0; i < names.length; i++) {
printPerson(names[i], ages[i], jobs[i]);
}
}
public static void printPerson(String name, int age, String job) {
System.out.println("์ด๋ฆ: " + name);
System.out.println("๋์ด: " + age);
System.out.println("์ง์
: " + job);
System.out.println("------------");
}
}
์ด๋ฆ: ์ฒ ์
๋์ด: 25
์ง์
: ๊ฐ๋ฐ์
------------
์ด๋ฆ: ์ํฌ
๋์ด: 23
์ง์
: ๋์์ด๋
------------
์ด๋ฆ: ๋ฏผ์
๋์ด: 30
์ง์
: PM
------------
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์์ ์ฝ๋
// ๊ฐ์ฒด ์งํฅ ์ฝ๋ - ๋ฐ์ดํฐ + ๊ธฐ๋ฅ์ ๊ฐ์ฒด๋ก ๋ฌถ์
class Person {
String name;
int age;
String job;
public Person(String name, int age, String job) {
this.name = name;
this.age = age;
this.job = job;
}
public void introduce() {
System.out.println("์ด๋ฆ: " + name);
System.out.println("๋์ด: " + age);
System.out.println("์ง์
: " + job);
System.out.println("------------");
}
}
public class Main {
public static void main(String[] args) {
Person[] people = {
new Person("์ฒ ์", 25, "๊ฐ๋ฐ์"),
new Person("์ํฌ", 23, "๋์์ด๋"),
new Person("๋ฏผ์", 30, "PM")
};
for (Person person : people) {
person.introduce(); // ๊ฐ์ฒด๊ฐ ์ค์ค๋ก ํ๋
}
}
}
์ด๋ฆ: ์ฒ ์
๋์ด: 25
์ง์
: ๊ฐ๋ฐ์
------------
์ด๋ฆ: ์ํฌ
๋์ด: 23
์ง์
: ๋์์ด๋
------------
์ด๋ฆ: ๋ฏผ์
๋์ด: 30
์ง์
: PM
------------
๋ฐ์ํ
LIST
'cs์ ๋ฆฌ > java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JVM, JDK, JRE (0) | 2025.03.18 |
---|---|
JAVA ๊ฐ๋ ๊ณผ ํน์ง (0) | 2025.03.17 |