์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ์ฝํ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ๋ ผ๋ธ๋กํน
- ์๋ฐ
- Node.js
- Java
- spring scheduler
- MySQL
- ์ฝ๋ฉํ ์คํธ
- ๋์์ธํจํด
- SpringBoot
- dockerhub
- docker network
- ์๊ณ ๋ฆฌ์ฆ
- React
- CICD
- oauth
- java์ฑํ
- db์ํคํ ์ณ
- spring
- GoogleLogin
- ํฌ๋ก์ค์ฌ์ดํธ ์คํฌ๋ฆฝํธ
- docker
- @scheduler
- ์ค๋ธ์
- node.js mysql ์ฐ๋
- db์ ๋ต
- injection๊ณต๊ฒฉ
- Personal Access Token
- Jenkins
- Today
- Total
<Hello Hosung๐/>
[Java] ์์์ ๋ํด ์ฝ๊ฒ ์์๋ณด์๐ง ๋ณธ๋ฌธ
[Java] ์์์ ๋ํด ์ฝ๊ฒ ์์๋ณด์๐ง
์ข์ถฉ์ฐ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ผ๊ธฐ๐ง 2024. 11. 11. 07:49์๋ฐ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP) ์ธ์ด์
๋๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ฐ๋
์ค ํ๋๋ "์์"์
๋๋ค. ์์์ ํ์ฉํ๋ฉด ๊ธฐ์กด์ ํด๋์ค๋ฅผ ๋ฐํ์ผ๋ก ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค ์ ์๋๋ฐ, ์ด๋ฅผ ํตํด ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ์ด๋ฒ ๋ธ๋ก๊ทธ์์๋ ์๋ฐ ์์์ ๊ธฐ๋ณธ ๊ฐ๋
๊ณผ ์ค์ ์์ ๋ฅผ ํตํด ์ด๋ฅผ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์ค๋ช
๋๋ฆด๊ฒ์๐
1. ์์์ด๋ ๋ฌด์์ธ๊ฐ?
**์์(Inheritance)**์ ํ๋์ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ฌผ๋ ค๋ฐ๋ ๊ธฐ๋ฅ์
๋๋ค. ๋ถ๋ชจ ํด๋์ค(์์ ํด๋์ค)์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค(ํ์ ํด๋์ค)์์ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ๋๋ฏ๋ก, ์ฝ๋์ ์ค๋ณต์ ์ค์ด๊ณ ํจ์จ์ ์ธ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์์ต๋๋ค.
์์์ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ
class ๋ถ๋ชจํด๋์ค {
// ๋ถ๋ชจ ํด๋์ค์ ์์ฑ(ํ๋)๊ณผ ๋ฉ์๋
}
class ์์ํด๋์ค extends ๋ถ๋ชจํด๋์ค {
// ์์ ํด๋์ค์ ์ถ๊ฐ์ ์ธ ์์ฑ(ํ๋)๊ณผ ๋ฉ์๋
}
extends ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์๋ฐ์ต๋๋ค.
2. ๊ฐ๋จํ ์์ ์์
๋ค์์ ๋๋ฌผ๊ณผ ๊ณ ์์ด ํด๋์ค๋ฅผ ํตํด ์์์ ์ค๋ช
ํ๋ ์์ ์
๋๋ค.
2.1. ๋ถ๋ชจ ํด๋์ค: Animal
class Animal {
// ํ๋
String name;
// ์์ฑ์
public Animal(String name) {
this.name = name;
}
// ๋ฉ์๋
public void sound() {
System.out.println("๋๋ฌผ์ด ์๋ฆฌ๋ฅผ ๋ธ๋ค.");
}
}
2.2. ์์ ํด๋์ค: Cat
class Cat extends Animal {
// ์์ฑ์
public Cat(String name) {
super(name); // ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์ ํธ์ถ
}
// ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
@Override
public void sound() {
System.out.println(name + "๋ ์ผ์น~ ํ๊ณ ์ธ์ด์.");
}
// ๊ณ ์์ด๋ง์ ๋ฉ์๋
public void scratch() {
System.out.println(name + "๊ฐ ํ ํด๊ณ ์์ด์!");
}
}
2.3. ์คํ ํด๋์ค: Main
public class Main {
public static void main(String[] args) {
// Animal ๊ฐ์ฒด ์์ฑ
Animal animal = new Animal("๋๋ฌผ");
animal.sound(); // ๋๋ฌผ์ด ์๋ฆฌ๋ฅผ ๋ธ๋ค.
// Cat ๊ฐ์ฒด ์์ฑ
Cat cat = new Cat("๊ณ ์์ด");
cat.sound(); // ๊ณ ์์ด๋ ์ผ์น~ ํ๊ณ ์ธ์ด์.
cat.scratch(); // ๊ณ ์์ด๊ฐ ํ ํด๊ณ ์์ด์!
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ
๋๋ฌผ์ด ์๋ฆฌ๋ฅผ ๋ธ๋ค.
๊ณ ์์ด๋ ์ผ์น~ ํ๊ณ ์ธ์ด์.
๊ณ ์์ด๊ฐ ํ ํด๊ณ ์์ด์!
3. ์์์ ์ฃผ์ ํน์ง
3.1. ๋ถ๋ชจ ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ฌผ๋ ค๋ฐ๋๋ค
์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ(ํ๋)๊ณผ ๋ฉ์๋๋ฅผ ๋ฌผ๋ ค๋ฐ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์ฝ๋์์ Cat ํด๋์ค๋ Animal ํด๋์ค์ name๊ณผ sound() ๋ฉ์๋๋ฅผ ์์๋ฐ์ต๋๋ค.
3.2. ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ(Method Overriding)
์์ ํด๋์ค์์ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์(์ค๋ฒ๋ผ์ด๋)ํ ์ ์์ต๋๋ค. @Override ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ๋ฎ์ด์ธ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Cat ํด๋์ค์ sound() ๋ฉ์๋๋ ๋ถ๋ชจ ํด๋์ค์ sound() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ ๊ฒ์
๋๋ค.
3.3. ์์ฑ์ ํธ์ถ
์์ ํด๋์ค์ ์์ฑ์๋ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํด์ผ ํ ๋๊ฐ ์์ต๋๋ค. ์์ ํด๋์ค์์ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํ๋ ค๋ฉด super() ํค์๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์์ ์์ Cat ํด๋์ค๋ super(name)์ ํตํด ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํฉ๋๋ค.
3.4. ์์ ํด๋์ค๋ง์ ๊ณ ์ ํ ๋ฉ์๋
์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์๋ ์๊ณ , ์ถ๊ฐ์ ์ธ ๋ฉ์๋๋ฅผ ์ ์ํ ์๋ ์์ต๋๋ค. ์์ ์์ Cat ํด๋์ค๋ scratch()๋ผ๋ ๊ณ ์ ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
4. ์์์ ์ฅ์
์ฝ๋ ์ฌ์ฌ์ฉ
๋ถ๋ชจ ํด๋์ค์์ ์์ฑํ ์ฝ๋(์์ฑ, ๋ฉ์๋)๋ฅผ ์์ ํด๋์ค์์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋ ์ค๋ณต์ ์ค์ผ ์ ์์ต๋๋ค.
์ ์ง๋ณด์ ์ฉ์ด
๋ถ๋ชจ ํด๋์ค์์ ๊ณตํต๋ ๊ธฐ๋ฅ์ ์์ ํ๋ฉด, ์์ ํด๋์ค์์ ๋ณ๋๋ก ์์ ํ ํ์ ์์ด ์๋์ผ๋ก ๋ฐ์๋ฉ๋๋ค.
๋คํ์ฑ ํ์ฉ
๋ถ๋ชจ ํด๋์ค ํ์
์ ๋ณ์๋ก ์์ ํด๋์ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์๋ ๋คํ์ฑ(Polymorphism)์ ํ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์ค์ํ ํน์ง์
๋๋ค.
5. ๋คํ์ฑ์ ํ์ฉํ ์์
๋คํ์ฑ์ ์ด์ฉํ๋ฉด ๋ถ๋ชจ ํด๋์ค ํ์
์ ๋ณ์๋ก ์์ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃฐ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋๊ฐ ๋์ฑ ์ ์ฐํด์ง๋๋ค.
public class Main {
public static void main(String[] args) {
// ๋คํ์ฑ ํ์ฉ
Animal myCat = new Cat("๋๋น");
myCat.sound(); // ๋๋น๋ ์ผ์น~ ํ๊ณ ์ธ์ด์.
}
}
์ด ์์ ์์ Animal ํ์
์ myCat ๋ณ์๋ ์ค์ ๋ก Cat ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํฉ๋๋ค. myCat.sound()๋ฅผ ํธ์ถํ๋ฉด Cat ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉํ sound() ๋ฉ์๋๊ฐ ์คํ๋ฉ๋๋ค.
6. ๋ง๋ฌด๋ฆฌ
์๋ฐ์ ์์์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ, ์ ์ง๋ณด์์ฑ, ๊ทธ๋ฆฌ๊ณ ๋คํ์ฑ์ ๋์ด๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์
๋๋ค. ๋ถ๋ชจ ํด๋์ค์์ ๊ณตํต๋ ๊ธฐ๋ฅ์ ์ ์ํ๊ณ , ์์ ํด๋์ค์์ ์ด๋ฅผ ์์๋ฐ์ ํ์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ๋ ๋ฐฉ์์ผ๋ก ํจ์จ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์์ต๋๋ค.
์ด๋ฒ ๊ธ์์ ์์์ ๊ฐ๋
๊ณผ ๊ฐ๋จํ ์์ ๋ฅผ ํตํด ์๋ฐ ์์์ ์ฝ๊ฒ ์ดํดํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ฐ๋
์ธ ์์์ ์ ํ์ฉํ๋ฉด ๋์ฑ ๊น๋ํ๊ณ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.