๐ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object Oriented Programming, OOP)์ ๊ฐ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ๊ฐ์ฒดํ(ํด๋์คํ)์์ผ ๋ฉ์ธํจ์์์๋ ๊ฐ์ฒดํ์ํจ ๊ธฐ๋ฅ๋ค์ ํธ์ถํด์ ์ฌ์ฉํ๋ ์ํฅ์ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ค.
๋ฑ์ฅ ๋ฐฐ๊ฒฝ - ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ "์ฝ๋ ์ฌ์ฌ์ฉ๊ณผ ํ์ฅ์ฑ์ ํ๊ณ, ๊ด๋ฆฌ์ ์ ์ง๋ณด์"์ ํ๊ณ
: ๊ธฐ์กด ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ๊ฒฝ์ฐ ํ๋ก์์ (ํจ์) → ๊ตฌ์กฐํ๋ฅผ ๊ตฌํํ์์ ๋ฟ, ๊ฒฐ๊ตญ ์์ฐจ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ด๋ค.
โจ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ 4๊ฐ์ง ํน์ง : ์บก์ํ, ์์์ฑ, ๋คํ์ฑ, ์ถ์ํ โจ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ OOP์ ๋ค ๊ฐ์ง ์ฃผ์ ํน์ง์ ์บก์ํ, ์์, ๋คํ์ฑ, ์ถ์ํ์ด๋ค.
์ด ๋ค ๊ฐ์ง ํน์ง์ผ๋ก ์ธํด ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋๋ค.
1. ์บก์ํ(Encpsulation)
: ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋ ํจ์(๋ฉ์๋)๋ฅผ ์บก์(Class)/์ปจํ ์ด๋ ์์ ๋๋ ๊ฒ
- ์๋์ฑ : ์ ๋ณด๋ฅผ ์ ์ดํจ์ผ๋ก์จ ์ธ๋ถ์ ์๋ชป๋ ์ ๊ทผ์ผ๋ก ๊ฐ์ด ๋ณํ๋ ๊ฒ ๋ง์์ค๋ค.
- ์ ๊ทผ์ ์ด์(private, protected, public)๋ฅผ ์ด์ฉํ์ฌ ํ์ํ ์์ฑ๊ณผ ์จ๊ธธ ์์ฑ์ ์ ์ดํ ์ ์์
- ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ, ์ฝ๋ ์ ์ง๋ณด์์ฑ ํฅ์
class Person {
private String name; // private ์ ๊ทผ ์ ์ด์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ๋ด๋ถ ๋ฐ์ดํฐ ๋ณดํธ
// ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์๋ง name ๋ฐ์ดํฐ์ ์ ๊ทผ ๊ฐ๋ฅ
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
2. ์์์ฑ(Inheritance)
: ์์ ํด๋์ค์์ ๋ถ๋ชจ ํด๋์ค๋ก๋ถํฐ ๋ถ๋ชจ์ ๋ชจ๋ ์์์ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ
- ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ์ฅ์ฑ์ผ๋ก ๋ถํ์ํ ์ฝ๋์ ๊ฐ์
- ํ์ ํด๋์ค(์์)์ ๊ธฐ์กด ํด๋์ค(๋ถ๋ชจ)์ ๋ชจ๋ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์๋ค.
- ์ ์ง ๋ณด์์ ํธ๋ฆฌ์ฑ
- ํด๋์ค๋ค์ ์๊ฒ ์ชผ๊ฐ๊ณ ๋ถํ ํ ํ์ ๋ ๊ณ ์ฒ๋ผ ํด๋์ค๋ฅผ ๊ตฌ์ฑํจ์ผ๋ก์จ ๋ถํ ๋ฐ ์ ๋ณต์ด ๊ฐ๋ฅํด์ก๋ค.
class Animal {
void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal { // extends ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๊ด๊ณ ํ์ฑ
@Override // ์์ ํด๋์ค dog์์ ํ์ฉํ ๋ถ๋ชจ ๋ฉ์๋์ sound ์ฌ์ ์ ํ์
void sound() {
System.out.println("Dog barks");
}
}
3. ๋คํ์ฑ(Polymorphism)
: ํ๋์ ๊ฐ์ฒด๊ฐ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๋์ํ๋ ๊ฒ
- ์ ์ฐํ ์ฝ๋ ์์ฑ, ์ ์ง ๋ณด์์ฑ ํฅ์
- ์ค๋ฒ๋ผ์ด๋ฉ(Overriding)
- ์ค๋ฒ๋ก๋ฉ(Overloading)
// ์ค๋ฒ๋ผ์ด๋ฉ : ์์๋ฐ์ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ์ฌ์ ์
class Bird {
void fly() {
System.out.println("Bird is flying");
}
}
class Sparrow extends Bird {
@Override //
void fly() {
System.out.println("Sparrow is flying fast");
}
}
// ์ค๋ฒ๋ก๋ฉ : ๋์ผํ ์ด๋ฆ์ ๋ฉ์๋๊ฐ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์
class MathOperation {
int add(int a, int b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
}
4. ์ถ์ํ(Abstraction)
: ๊ฐ์ฒด์ ๋ณต์กํ ๊ตฌํ ์ธ๋ณด ์ ๋ณด๋ ์จ๊ธฐ๊ณ ์ค์ํ ๊ธฐ๋ฅ๋ง ์ธ๋ถ์ ์ ๊ณตํ๋ ๊ฒ
- ๋ณต์ก์ฑ ๊ฐ์
- ๋ถํ์ํ ๋ถ๋ถ์ ์จ๊น์ผ๋ก์จ ๋จ์ํ ์งํฅ
- ์ ์ง๋ณด์์ฑ ํฅ์
- ๊ตฌํ ์ธ๋ถ ์ ๋ณด๊ฐ ๋ฐ๋์ด๋ ์ธํฐํ์ด์ค๋ ๊ทธ๋๋ก ์ ์ง๋๊ธฐ์ ์ถ๊ฐ ์์ ์ด ํ์ ์๋ค.
// ๊ณตํต๋ ๊ธฐ๋ฅ ์ ์ (์ถ์ํด๋์ค)
abstract class Animal {
abstract void sound();
}
//์์๋ฐ์ ํด๋์ค๋ค์ ๊ตฌ์ฒด์ ๋์ ๊ตฌํ
class Cat extends Animal {
@Override
void sound() {
System.out.println("Meow");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Bark");
}
}
โ๏ธ
'Language > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ๋ฉ๋ชจ๋ฆฌ ์์ญ (0) | 2024.08.25 |
---|---|
[JAVA] ์ค๋ ๋(Thread) ์๋ฏธ์ ์ฌ์ฉ๋ฒ (4) | 2024.08.24 |
[JAVA] ์ถ์ ํด๋์ค์ ์ธํฐํ์ด์ค (0) | 2024.08.19 |
[JAVA] static์ ์๋ฏธ์ ์ฌ์ฉ๋ฒ (0) | 2024.08.19 |
[JAVA] ๊ฐ์ฒด(Object)๋? (0) | 2024.08.16 |