| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- db์ํคํ ์ณ
- ์๋ฐ
- ์ฟ ๋ฒ๋คํฐ์ค
- ์ฝ๋ฉํ ์คํธ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- Java
- oauth
- ํฌ๋ก์ค์ฌ์ดํธ ์คํฌ๋ฆฝํธ
- React
- ์๊ณ ๋ฆฌ์ฆ
- ๋์์ธํจํด
- Node.js
- java์ฑํ
- Personal Access Token
- @scheduler
- MySQL
- ์ค๋ธ์
- docker
- spring
- SpringBoot
- spring scheduler
- GoogleLogin
- injection๊ณต๊ฒฉ
- Jenkins
- ๋ ผ๋ธ๋กํน
- dockerhub
- CICD
- db์ ๋ต
- node.js mysql ์ฐ๋
- ์ฝํ
- Today
- Total
<Hello Hosung๐/>
[Java] ์ธํฐํ์ด์ค๋? ๋ณธ๋ฌธ
[Java] ์ธํฐํ์ด์ค๋?
์ข์ถฉ์ฐ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ผ๊ธฐ๐ง 2024. 11. 10. 20:34 ์๋ฐ ์ธํฐํ์ด์ค๋ ํด๋์ค๊ฐ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ ๋ฉ์๋๋ฅผ ์ ์ธํ๋ ์ถ์์ ์ธ ํ์
์
๋๋ค. ์ธํฐํ์ด์ค๋ ๋ฉ์๋์ ์ ์ธ๋ง ํฌํจํ๊ณ , ๋ฉ์๋ ๋ณธ์ฒด(๊ตฌํ)๋ ํฌํจํ์ง ์์ต๋๋ค. ํด๋์ค๋ฅผ ๋ง๋ค ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ(implement)ํ๋ฉด, ์ธํฐํ์ด์ค์ ์ ์๋ ๋ชจ๋ ๋ฉ์๋๋ฅผ ๋ฐ๋์ ๊ตฌํํด์ผ ํฉ๋๋ค.
์ธํฐํ์ด์ค์ ์ฃผ๋ ๋ชฉ์ ์ ๋คํ์ฑ์ ์ ๊ณตํ๊ณ , ๋์จํ ๊ฒฐํฉ์ ์ ๋ํ๋ ๊ฒ์
๋๋ค. ์ฆ, ์๋ก ๋ค๋ฅธ ํด๋์ค๋ค์ด ๋์ผํ ๋ฉ์๋๋ฅผ ํตํด ๋์ํ ์ ์๋๋ก ํ์ฌ ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ด๋ ์ญํ ์ ํฉ๋๋ค.
์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ
์ธํฐํ์ด์ค๋ interface ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Animal์ด๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ณ , sound()๋ผ๋ ๋ฉ์๋๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค.
interface Animal {
void sound(); // ๋ฉ์๋ ์ ์ธ (๊ตฌํ X)
}
์ธํฐํ์ด์ค์ ๋ฉ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก public abstract๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ๊ทธ๋์ ๋ฉ์๋์ public์ด๋ abstract ํค์๋๋ฅผ ๋ช
์ํ์ง ์์๋ ์๋์ผ๋ก ๊ทธ ์์ฑ์ด ์ ์ฉ๋ฉ๋๋ค.
์ธํฐํ์ด์ค ๊ตฌํ
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ implements ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ธํฐํ์ด์ค์ ์ ์๋ ๋ชจ๋ ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
class Dog implements Animal {
@Override
public void sound() {
System.out.println("๋ฉ๋ฉ!");
}
}
class Cat implements Animal {
@Override
public void sound() {
System.out.println("์ผ์น!");
}
}
์ ์์ ์์ Dog ํด๋์ค์ Cat ํด๋์ค๋ ๋ชจ๋ Animal ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ , ๊ฐ๊ฐ sound() ๋ฉ์๋๋ฅผ ์์ ๋ง์ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๊ณ ์์ต๋๋ค.
์ธํฐํ์ด์ค์ ํน์ง
1. ๋ค์ค ์์: ์๋ฐ๋ ํด๋์ค์ ๋ค์ค ์์์ ์ง์ํ์ง ์์ง๋ง, ์ธํฐํ์ด์ค๋ ๋ค์ค ์์์ ์ง์ํฉ๋๋ค. ์ฆ, ํ๋์ ํด๋์ค๋ ์ฌ๋ฌ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
interface Flyable {
void fly();
}
interface Swimmable {
void swim();
}
class Duck implements Flyable, Swimmable {
@Override
public void fly() {
System.out.println("์ค๋ฆฌ ๋๋ ์ค!");
}
@Override
public void swim() {
System.out.println("์ค๋ฆฌ ์์ ์ค!");
}
}
์์ ๊ฐ์ด Duck ํด๋์ค๋ Flyable๊ณผ Swimmable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
2. ๋คํ์ฑ: ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋คํ์ฑ์ ๊ตฌํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Animal ํ์
์ผ๋ก ์ ์ธ๋ ๋ณ์๋ Dog๋ Cat ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
public class Main {
public static void main(String[] args) {
Animal animal = new Dog();
animal.sound(); // "๋ฉ๋ฉ!"
animal = new Cat();
animal.sound(); // "์ผ์น!"
}
}
Animal ์ธํฐํ์ด์ค ํ์
์ ๋ณ์ animal์ Dog ๊ฐ์ฒด์ Cat ๊ฐ์ฒด๋ฅผ ๋ชจ๋ ์ฐธ์กฐํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋๊ฐ ๋ ์ ์ฐํ๊ณ ํ์ฅ ๊ฐ๋ฅํด์ง๋๋ค.
3. ๋ํดํธ ๋ฉ์๋ (Java 8 ์ดํ): Java 8๋ถํฐ๋ ์ธํฐํ์ด์ค์ default ๋ฉ์๋๋ฅผ ์ ์ธํ ์ ์๊ฒ ๋์์ต๋๋ค. default ๋ฉ์๋๋ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ์ ๊ณตํ์ง๋ง, ์ด๋ฅผ ๊ตฌํํ ํด๋์ค์์ ๋ฐ๋์ ์ค๋ฒ๋ผ์ด๋ํ ํ์๋ ์์ต๋๋ค.
interface Animal {
void sound(); // ์ถ์ ๋ฉ์๋
default void eat() {
System.out.println("์์์ ๋จน์ต๋๋ค.");
}
}
class Dog implements Animal {
@Override
public void sound() {
System.out.println("๋ฉ๋ฉ!");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.sound(); // "๋ฉ๋ฉ!"
dog.eat(); // "์์์ ๋จน์ต๋๋ค."
}
}
Dog ํด๋์ค๋ sound() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํด์ผ ํ์ง๋ง, eat() ๋ฉ์๋๋ default๋ก ์ ๊ณต๋๊ธฐ ๋๋ฌธ์ ๋ณ๋๋ก ์ค๋ฒ๋ผ์ด๋ํ์ง ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ธํฐํ์ด์ค์ ์ถ์ ํด๋์ค์ ์ฐจ์ด
์์ฃผ ํผ๋๋๋ ๊ฐ๋
์ค ํ๋๋ ์ธํฐํ์ด์ค์ ์ถ์ ํด๋์ค์
๋๋ค. ๋ ๊ฐ๋
์ ๋ชจ๋ ๋ฉ์๋์ ๊ตฌํ์ ๊ฐ์ ํ๋ ์ญํ ์ ํ์ง๋ง, ๋ช ๊ฐ์ง ์ค์ํ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
์ถ์ ํด๋์ค: ์ผ๋ถ ๋ฉ์๋๋ ๊ตฌํํ ์ ์์ง๋ง, ์ผ๋ถ๋ ์ถ์ ๋ฉ์๋๋ก ์ ์ธํ ์ ์์ต๋๋ค. ๋ํ, ๋ณ์์ ์์ฑ์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
์ธํฐํ์ด์ค: ๋ฉ์๋ ๊ตฌํ์ด ์๊ณ , ๋ชจ๋ ๋ฉ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ถ์์ ์
๋๋ค. ์ธํฐํ์ด์ค์์๋ default ๋ฉ์๋ ์ธ์๋ ๊ตฌํ์ ์ ๊ณตํ ์ ์์ผ๋ฉฐ, ๋ณ์๋ public static final์ด์ด์ผ ํฉ๋๋ค.
์ธํฐํ์ด์ค์ ํ์ฉ ์์
์ธํฐํ์ด์ค๋ ์ฃผ๋ก ๋์์ ์ ์ํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ํ Payment ๋ฐฉ์(์นด๋ ๊ฒฐ์ , ํ๊ธ ๊ฒฐ์ ๋ฑ)์ ๊ตฌํํ ๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ์ ์ฒ๋ฆฌ ๋ฐฉ์์ ํต์ผ์ฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
interface Payment {
void processPayment();
}
class CreditCardPayment implements Payment {
@Override
public void processPayment() {
System.out.println("์นด๋ ๊ฒฐ์ ์ฒ๋ฆฌ");
}
}
class CashPayment implements Payment {
@Override
public void processPayment() {
System.out.println("ํ๊ธ ๊ฒฐ์ ์ฒ๋ฆฌ");
}
}
public class Main {
public static void main(String[] args) {
Payment payment = new CreditCardPayment();
payment.processPayment(); // "์นด๋ ๊ฒฐ์ ์ฒ๋ฆฌ"
payment = new CashPayment();
payment.processPayment(); // "ํ๊ธ ๊ฒฐ์ ์ฒ๋ฆฌ"
}
}
์ด์ฒ๋ผ Payment ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ค์ํ ๊ฒฐ์ ๋ฐฉ๋ฒ์ ์ ์ฐํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
์๋ฐ ์ธํฐํ์ด์ค๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ๋งค์ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ์ ์ฐ์ฑ์ ๋์ด๊ณ , ํด๋์ค ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ์ด ์ ์ง๋ณด์์ ํ์ฅ์ฑ์ด ์ฉ์ดํ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ์ ์์ต๋๋ค. ๋ค์ค ์์, ๋คํ์ฑ, ๋ํดํธ ๋ฉ์๋ ๋ฑ์ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค๋ฅผ ์ ํ์ฉํ๋ฉด, ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ์ฅ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
'๐ป Java > ใ คJava(Basic)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Java] ๋์์ธ ํจํด (3) | 2024.11.14 |
|---|---|
| [Java] ์ง๋ ฌํ(Serialization)๋? (2) | 2024.11.12 |
| [Java] ํ์ผ ์ ์ถ๋ ฅ (IO) ์ดํดํ๊ธฐ (1) | 2024.11.09 |
| [Java] ์์ผํต์ ์ ๊ธฐ์ด(+์ฑํ ๐ง) (0) | 2024.11.07 |