๋ธ๋ก๊ทธ ์ฎ๊ฒผ์ต๋๋ค! ๐ก integer.blog
์๋ฐ์ ์ ์(๋จ๊ถ์ฑ ์ ) ํ์ต๋ด์ฉ ์ ๋ฆฌ
1. ์ถ์ ํด๋์ค (Abstract class)
- ๋ฏธ์์ฑ ๋ฉ์๋(์ถ์๋ฉ์๋)๋ฅผ ํฌํจํ๊ณ ์๋ค๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ ์ผ๋ฐํด๋์ค์ ๊ฐ๋ค.
- ์ถ์๋ฉ์๋๊ฐ ์์ด๋
abstract
๋ฅผ ๋ถ์ฌ์ ์ถ์ํด๋์ค๋ก ์ง์ ํ ์ ์๋ค. - ์ถ์ํด๋์ค๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค.
- ์ถ์ํด๋์ค๋ ์์์ ํตํด์ ์์ํด๋์ค์ ์ํด์๋ง ์์ฑ๋๋ค.
abstract class ํด๋์ค์ด๋ฆ { ... }
2. ์ถ์ ๋ฉ์๋ (Abstract method)
- ์ ์ธ๋ถ๋ง ์์ฑํ๊ณ ๊ตฌํ๋ถ๋ ์์ฑํ์ง ์์ ๊ฒ์ด ์ถ์๋ฉ์๋.
/* ์ฃผ์์ ํตํด ๊ธฐ๋ฅ ์ค๋ช */ abstract ๋ฆฌํดํ์ ๋ฉ์๋์ด๋ฆ();
- ์ถ์ํด๋์ค๋ก๋ถํฐ ์์๋ฐ๋ ์์ํด๋์ค๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ํตํด ์กฐ์์ธ ์ถ์ํด๋์ค์ ์ถ์๋ฉ์๋๋ฅผ ๋ชจ๋ ๊ตฌํํด์ผ ํ๋ค.
- ๋ง์ฝ ๋ถ๋ชจ๋ก ๋ถํฐ ์์๋ฐ์ ์ถ์๋ฉ์๋ ์ค ํ๋๋ผ๋ ๊ตฌํํ์ง ์์ผ๋ฉด ์์ํด๋์ค ์ญ์ ์ถ์ํด๋์ค๋ก ์ง์ ํด์ผ ํ๋ค.
3. ์ธํฐํ์ด์ค
- ์ธํฐํ์ด์ค๋ ์ผ์ข ์ ์ถ์ํด๋์ค๋ค.
- ์ธํฐํ์ด์ค๋ ์ถ์ํด๋์ค์ฒ๋ผ ์ถ์๋ฉ์๋๋ฅผ ๊ฐ์ง๋ง, ์ถ์ํด๋์ค์ ๋ฌ๋ฆฌ ๋ชธํต์ ๊ฐ์ถ ์ผ๋ฐ ๋ฉ์๋ ๋๋ ๋ฉค๋ฒ๋ณ์๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ์ธํฐํ์ด์ค๋ ์ค์ง ์ถ์๋ฉ์๋์ ์์๋ง์ ๋ฉค๋ฒ๋ก ๊ฐ์ง ์ ์๋ค.
4. ์ธํฐํ์ด์ค์ ์์ฑ
interface PlayingCard { public static final int SPADE = 4; final int DIAMOND = 3; //public static final int DIAMOND = 3; static int HEART = 2; //public static final int HEART = 2; int CLOVER = 1; //public static final int CLOVER = 1; public abstract String getCardNumber(); String getCardKind(); //public abstract String getCardKind(); }
- ๋ชจ๋ ๋ฉค๋ฒ๋ณ์๋ public static final ์ด์ด์ผํ๋ฉฐ, ์ด๋ฅผ ์๋ตํ ์ ์๋ค.
- ๋ชจ๋ ๋ฉ์๋๋ public abstract ์ด์ด์ผํ๋ฉฐ, ์ด๋ฅผ ์๋ตํ ์ ์๋ค.
- ๋จ, jdk 1.8๋ถํฐ static ๋ฉ์๋์ ๋ํดํธ ๋ฉ์ํธ๋ ์์ธ
- ๋จ, jdk 1.8๋ถํฐ static ๋ฉ์๋์ ๋ํดํธ ๋ฉ์ํธ๋ ์์ธ
5. ์ธํฐํ์ด์ค์ ์์๊ณผ ๊ตฌํ
- ์ธํฐํ์ด์ค๋ ์ธํฐํ์ด์ค๋ก๋ถํฐ๋ง ์์๋ฐ์ ์ ์๋ค.
- ํด๋์ค์ ๋ฌ๋ฆฌ ๋ค์ค ์์์ด ๊ฐ๋ฅํ๋ค.
- ์ธํฐํ์ด์ค๋ ์ถ์ํด๋์ค์ฒ๋ผ ๊ทธ ์์ฒด๋ก๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค.
- ํด๋์ค๋
extends
(ํ์ฅํ๋ค) ์ฌ์ฉ, ์ธํฐํ์ด์ค๋implements
(๊ตฌํํ๋ค) ์ฌ์ฉ. - ์์๊ณผ ๊ตฌํ์ ๋์์ ํ ์ ์๋ค.
class Fighter extends Unit implements Fightable { public void move(int x, int y) { /* ๋ด์ฉ ์๋ต */ } public void attack(Unit u) { /* ๋ด์ฉ ์๋ต */ } }
6. ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ ๋คํ์ฑ
๋ฆฌํด ํ์ ์ด ์ธํฐํ์ด์ค๋ผ๋ ๊ฒ์ ๋ฉ์๋๊ฐ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
Fightable method() { ... Fighter f = new Fighter(); return f; }
repair ๋ฉ์๋์ ๋งค๊ฐ๋ณ์์ ํ์ ์ Repairable๋ก ์ ์ธํ๋ฉด, ์ด ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก Repairable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ ์ธ์คํด์ค๋ง ๋ฐ์๋ค์ฌ์ง๋ค.
interface Repairable() {} class SCV extends GroundUnit implements Repairable { ... } class Tank extends GroundUnit implements Repairable { ... } class Drop extends AirUnit implements Repairable { ... }
void repair(Repairable r) { // ๋งค๊ฐ๋ณ์๋ก ๋๊ฒจ๋ฐ์ ์ ๋์ ์๋ฆฌํ๋ค. }
์์ผ๋ก ์๋ก์ด ํด๋์ค๊ฐ ์ถ๊ฐ๋ ๋, SCV์ repair ๋ฉ์๋์ ์ํด ์๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋๋ก ํ๋ ค๋ฉด Repairable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฉด ๋๋ค.
์ธํฐํ์ด์ค ํ์ ์ ๋งค๊ฐ๋ณ์๊ฐ ๊ฐ๋ ์๋ฏธ๋ ๋ฉ์๋ ํธ์ถ ์ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ๊ณตํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
7. default ๋ฉ์๋์ static ๋ฉ์๋
- ์ธํฐํ์ด์ค์ ์๋ ์ถ์๋ฉ์๋๋ง ์ ์ธํ ์ ์์๋๋ฐ, JDK1.8๋ถํฐ default ๋ฉ์๋์ static ๋ฉ์๋๋ ์ถ๊ฐํ ์ ์๊ฒ ๋์๋ค.
- ์ธํฐํ์ด์ค์ default๋ฉ์๋์ static๋ฉ์๋๋ ์ ๊ทผ ์ ์ด์๊ฐ ํญ์ public์ด๋ฉฐ, ์๋ตํ ์ ์๋ค.
- default ๋ฉ์๋๋ ์ถ์๋ฉ์๋์ ๊ธฐ๋ณธ์ ์ธ ๊ตฌํ์ ์ ๊ณตํ๋ ๋ฉ์๋์ด๋ค.
- default ๋ฉ์๋๋ ์ถ์๋ฉ์๋๊ฐ ์๋๊ธฐ ๋๋ฌธ์ default ๋ฉ์๋๊ฐ ์๋ก ์ถ๊ฐ๋์ด๋ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์์๋ ๋๋ค.
- default ๋ฉ์๋๋ ์ถ์๋ฉ์๋์ ๋ฌ๋ฆฌ ์ผ๋ฐ ๋ฉ์๋์ฒ๋ผ ๋ชธํต{}์ด ์์ด์ผ ํ๋ค.
8. ๋ด๋ถํด๋์ค
- ๋ด๋ถ ํด๋์ค๋ ํด๋์ค ๋ด์ ์ ์ธ๋ ํด๋์ค๋ค.
- ๋ด๋ถ ํด๋์ค๋ ์ฃผ๋ก AWT๋ Swing๊ณผ ๊ฐ์ GUI์ดํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฒคํธ์ฒ๋ฆฌ ์ธ์๋ ์ ์ฌ์ฉํ์ง ์๋๋ค.
- ๋ด๋ถ ํด๋์ค์ ์ข
๋ฅ์ ํน์ง
- instance class
- ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ๋ณ์ ์ ์ธ์์น์ ์ ์ธ.
- ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ๋ฉค๋ฒ์ฒ๋ผ ๋ค๋ฃจ์ด์ง๋ค.
- ์ฃผ๋ก ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ๋ฉค๋ฒ๋ค๊ณผ ๊ด๋ จ๋ ์์ ์ ์ฌ์ฉ๋ ๋ชฉ์ ์ผ๋ก ์ ์ธ๋๋ค.
- static class
- ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ๋ณ์ ์ ์ธ์์น์ ์ ์ธ.
- ์ธ๋ถ ํด๋์ค์ static ๋ฉค๋ฒ์ฒ๋ผ ๋ค๋ฃจ์ด์ง๋ค.
- ํนํ static ๋ฉ์๋์์ ์ฌ์ฉ๋ ๋ชฉ์ ์ผ๋ก ์ ์ธ๋๋ค.
- local class
- ์ธ๋ถ ํด๋์ค์ ๋ฉ์๋๋ ์ด๊ธฐํ๋ธ๋ญ ์์ ์ ์ธ.
- ์ ์ธ๋ ์์ญ ๋ด๋ถ์์๋ง ์ฌ์ฉ๋ ์ ์๋ค.
- anonymous class
- ํด๋์ค์ ์ ์ธ๊ณผ ๊ฐ์ฒด์ ์์ฑ์ ๋์์ ํ๋ ์ด๋ฆ์๋ ํด๋์ค(์ผํ์ฉ)
- instance class