-
[Java] extends์ implements์ ์ฐจ์ด๐ปProgramming/Java 2023. 10. 4. 21:14
์ฐ์ extends์ implements ๋ชจ๋ "์์"์ ๋ํ ๊ฐ๋ ์ด๋ค.
Java๋ OOP(Object-Oriented Programming) ์ฆ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค.
๐ OOP(Object-Oriented Programming)
OOP๋ ๊ฐ์ฒด์ ๊ด์ ์์ ํ๋ก๊ทธ๋๋ฐํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. OOP๋ ๊ฐ์ฒด๋ค์ "์ ๊ธฐ์ ์ธ ๊ด๊ณ"๋ฅผ ํตํด์ ํ๋ก์ธ์ค๊ฐ ์งํ๋๋ค.
OOP์ ํน์ง
1. ์์๊ณผ ์ธํฐํ์ด์ค
2. ๋คํ์ฑ(ํ๋์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ๊ฐ์ง ํํ๋ฅผ ๊ฐ์ง ์ ์๋ค๋ ๊ฒ์ ์๋ฏธ), ์ฌ์ฉ ํธ์์ฑ
3. ์บก์ํ, ์ ๋ณด ์๋
4. ์๋ฃ ์ถ์ํ(๋ชจ๋ธ๋ง)
5. ๋์ ๋ฐ์ธ๋ฉ
๐ ์์
https://wooono.tistory.com/261 - ์์ ํ๋ํ๋๋ ๋ชจ๋ ๊ฐ์ฒด์ด๊ณ , ํด๋์ค์ด๋ค.
- ์ด๋ฌํ ๊ณ์ธต์ ํํํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ฒ์ด ๋ฐ๋ก ์์.
- ์์ ์, ํ์ ๊ฐ์ฒด(์์)์ ์์ ๊ฐ์ฒด(๋ถ๋ชจ)์ ํน์ง(๋ฉ์๋๋ ๋ณ์)์ ๋ฌผ๋ ค๋ฐ๊ฒ ๋๋ค.
- ์ด๋, ๋ถ๋ชจ ๊ฐ์ฒด์ ํน์ง์ "์๋กญ๊ฒ ๊ตฌํ"ํ๋๊ฐ, ์๋๋ฉด "๊ทธ๋๋ก ์ฌ์ฉ"ํ๋๊ฐ์ ๋ฐ๋ผ์ ์์์ ํํ๊ฐ ๋ฌ๋ฆฌ๊ฒ ๋๋ค. → ์ด๊ฒ ๋ฐ๋ก "extends์ implements์ ์ฐจ์ด"์ด๊ธฐ๋ ํ๋ค!
- Java๋ ๋ค์ค ์์์ ์ง์ํ์ง ์๋๋ค. → ๋ถ๋ชจ ํด๋์ค๊ฐ ๋ ๊ฐ ์ด์ ์กด์ฌํ ์ ์๋ค. → implements(interface)์ ๋ฑ์ฅ
๐ ์์์ ๋ค์ํ ๋ฐฉ๋ฒ๋ค
extends
: ์์์ ๋ํ์ ์ธ ํํ๋ก ๋ถ๋ชจ์์ ์ ์ธ๊ณผ ์ ์๋ฅผ ๋ณด๋ ํ๋ฉฐ, ์์์ ์ค๋ฒ๋ผ์ด๋ฉ ํ ํ์ ์์ด ๋ถ๋ชจ์ ๋ณ์์ ๋ฉ์๋๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. (but, ์ค๋ฒ๋ผ์ด๋ฉ ํด๋ ๋ฌธ์ ์์)
class Vehicle { protected int speed = 3; public int getSpeed(){ return speed; } public void setSpeed(int speed){ this.speed = speed; } } class Car extends Vehicle{ public void printspd(){ System.out.println(speed); } } public class ExtendsSample { public static main (String[] args){ Car A = new Car(); System.out.println(A.getSpeed()); A.printspd(); } }
implements(interface ๊ตฌํ)
: ๋ถ๋ชจ ๊ฐ์ฒด๋ ์ ์ธ๋ง ํ๋ฉฐ, ์ ์๋ "๋ฐ๋์" ์์์ด ์ค๋ฒ๋ผ์ด๋ฉ(์ฌ์ ์)ํด์ ์ฌ์ฉํ๋ค. implements๋ ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ๋ ๊ฒ์ด๋ค. ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ ๊ฒฝ์ฐ ๋ฌด์กฐ๊ฑด ์ธํฐํ์ด์ค์ ์ ์๋์ด ์๋ ๋ชจ๋ ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
interface TestInterface{ public static int num = 8; public void fun1(); public void fun2(); } class InterfaceExam implements TestInterface{ @Override public void fun1(){ System.out.println(num); } @Override public void fun2() { } } public class InterfaceSample{ public static void main(String args[]){ InterfaceExam exam = new InterfaceExam(); exam.fun1(); } }
์ด๋ ๊ฒ ๋ถ๋ชจ ํด๋์ค ๋ณ์๋ ๋ฉ์๋ ์ด๋ฆ๋ง ๊ฐ์ ธ์์ ๋ค์ ๋ค ์ฌ์ ์ ํด์ผํ๋ฉด ์ ์์์ ํด์ผํ๋๊ฐ? → Java์ C#์ ์์์ ๊ณ์ฝ ๋ฐ ๋ถ๋ฅ์ ์๋ฏธ๊ฐ ๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํ๋ค.
abstract
: extends์ interface์ ํผํฉ์ผ๋ก extendsํ๋ ๋ช ๊ฐ๋ ์ถ์ ๋ฉ์๋๋ก ๊ตฌํ๋์ด ์๋ค.
๐ ์์์ด ํ์ํ ์ด์
"์ฝ๋์ ์ค๋ณต"์ ์์ ๊ธฐ ์ํจ์ด๋ค. ์ฝ๋์ ์ค๋ณต์ด ๋ง์์ง๋ค๋ฉด, ์ ์ง ๋ณด์์ ๋ง์ ๋น์ฉ์ ์์์ผํ๋ค. ๋ฐ๋ผ์ OOP์์๋ ์์์ ํตํด์ ์ฝ๋์ ์ค๋ณต ๋ฌธ์ ๋ฅผ ์ผ๋ถ ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
๋ง์ฝ์ ์์์ด ์์๋ค๋ฉด ์์ ํด๋์ค์์ ์ฐ๋ ๋ณ์์ ๋ฉ์๋, ๋ถ๋ชจ ํด๋์ค์์ ์ฐ๋ ๋ณ์์ ๋ฉ์๋๊ฐ ๊ฐ์ ๋ ์์ ํด๋์ค์ ๋ถ๋ชจ ํด๋์ค์ ๋ด์ฉ์ ๊ทธ๋๋ก ๋ค์ ์จ์ฃผ์ด์ผํ๋ค. → "์ฝ๋์ ์ค๋ณต"
์ด์ด์ ๊ทธ๋๋ก ๋ค์ ์จ์ฃผ์๋๋ฐ ์ ๋ณ์์ ๋ฉ์๋์ ๋ฌธ์ ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์๊ฒผ์ ๊ฒฝ์ฐ ๋ถ๋ชจ ํด๋์ค์ ์ฝ๋์ ์์ ํด๋์ค์ ์ฝ๋๋ฅผ ๋ชจ๋ ๊ณ ์ณ์ฃผ์ด์ผ ํ๋ค. ๋ง์ฝ ์์์ ์ด์ฉํ๋ค๋ฉด ๋ถ๋ชจ ํด๋์ค์ ์ฝ๋๋ง ๊ณ ์ณ์ฃผ๋ฉด ๋๋ค. → "์ ์ง๋ณด์์ ์ฉ์ด"
๐ ์ ๋ฆฌ
1. class๊ฐ class๋ฅผ ์์๋ฐ์๋๋ extends๋ฅผ ์ฌ์ฉํ๊ณ , interface๊ฐ interface๋ฅผ ์์๋ฐ์ ๋๋ extends๋ฅผ ์ฌ์ฉํ๋ค.
- ์ด๊ฒ ๋ญ๋ง์ธ๊ฐ ์ถ์๋๋ฐ ๊ฐ์ ๊ฒ๋ผ๋ฆฌ ์์๋ฐ์ ๋๋ extends๋ฅผ ์ฌ์ฉํ๋ค๊ณ ์ ๋ฆฌํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
2. class๊ฐ interface๋ฅผ ์์๋ฐ๋ ๊ฒฝ์ฐ์๋ implements๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
3. Interface๊ฐ Class๋ฅผ ์์๋ฐ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค. (์ ์ด์ ์ธํฐํ์ด์ค๋ ๊ตฌํ์ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ง ๊ฒ์ด๊ธฐ ๋๋ฌธ์)
4. ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์์ ๊ฒฝ์ฐ ์ธํฐํ์ด์ค์ ๋ชจ๋ ๋ฉ์๋๋ฅผ ๋ฐ๋์ ์ค๋ฒ๋ผ์ด๋ ํด์ผํ๋ค๊ณ ๊ฐ์ ํ๋ค. ๋ง์ฝ ๋ค ์ค๋ฒ๋ผ์ด๋ ํ์ง ์์ ๊ฒฝ์ฐ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
5. ์ข ํท๊ฐ๋ ธ๋ ์ ์ธ๋ฐ, extends๊ฐ ๋ฌด์กฐ๊ฑด ํ๋์ ํด๋์ค๋ง ์์ํด์ผ ํ๋ค๊ณ ์๊ฐํ๋ฉด ์๋๊ณ , ์ธํฐํ์ด์ค๊ฐ ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ ๋ extends๋ฅผ ์ด์ฉํ์ฌ ๋ค์ค ์์์ด ๊ฐ๋ฅํ๋ค.
๐ References
https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4
'๐ปProgramming > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] HashMap ์ฌ์ฉ๋ฒ (0) 2024.03.10 [Java] ํจ์ํ ์ธํฐํ์ด์ค์ ๋๋ค (0) 2024.02.23