[Become a Java-Masta๐จโ๐ซ 4์ฃผ์ฐจ] ํด๋์ค, ์ธํฐํ์ด์ค
๐ฏ ๋ชฉํ
์๋ฐ์ Class ์ Interface์ ๋ํด ํ์ตํ๊ธฐ.
๐ ํ์ตํ ๊ฒ
ํด๋์ค
์ถ์ ํด๋์ค
์ธํฐํ์ด์ค
๐จ๐ฑ ํด๋์ค
๐ก ํด๋์ค ์ ์
์๋ฐ์์ ํด๋์ค๋ ์ ์ฌํ ํน์ง๋ค์ ์ง๋ ๊ฐ์ฒด๋ค์ ์์ฑ๊ณผ ํ์๋ค์ ์ ์ํด๋์ ์ค๊ณ๋์ ๊ฐ์ ๊ฒ์ด๋ค.
์ด ์ค๊ณ๋๋ฅผ ์ด์ฉํด์ ๋์ผํ ํน์ง์ ๊ฐ์ฒด๋ฅผ ์ฐ์ด๋ด๋ ํ๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค.
๊ฐ์ฒด : ์ค์ธ๊ณ(Real World)์ ์กด์ฌํ๋ ์ /๋ฌดํ์ ๋ชจ๋ ๊ฒ
์์ฑ(๋ช ์ฌํ)๊ณผ ํ์(๋์ฌํ)๋ฅผ ๊ฐ๋๋ค.
ex) ์๋์ฐจ (์ ํ)
- ์์ฑ : ์ฃผํ๊ฑฐ๋ฆฌ, ์ฐจ์ข , ์์, ๋ง๋ ฅ,,,
- ํ์ : ์๋์ผ๊ธฐ, ์๋๋๊ธฐ, ์ฃผํํ๊ธฐ,,,
ex) ๊ณ์ข (๋ฌดํ)
- ์์ฑ : ๊ณ์ข๋ฒํธ, ์๊ธ์ฃผ, ์์ก, ์ด์ฒดํ๋,,,
- ํ์ : ์์ก์กฐํ, ์ ๊ธ, ์ถ๊ธ, ์ก๊ธ,,,
ํด๋์ค | ๊ฐ์ฒด |
---|---|
๋ถ์ด๋นตํ | ๋ถ์ด๋นต |
๊ณต์ฅ ์์ฐ๋ผ์ธ | ์ ํ |
๊ฑด๋ฌผ์ค๊ณ๋ | ๊ฑด๋ฌผ |
๊ฐ์ ํด๋์ค๋ก๋ถํฐ ์์ฑ๋ ๊ฐ์ฒด๋ ๋ชจ๋ ๊ฐ์ ์์ฑ๊ณผ ํ์๋ฅผ ๊ฐ์ง๋๋ฐ, ๊ฐ์ฒด๋ง๋ค ๊ณ ์ ํ ์์ฑ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
์ฆ, ๊ฐ์ ํด๋์ค์์ ์์ฑ๋ ๊ฐ์ฒด๋ผ๋ ๋ชจ๋ ๋ค๋ฅด๋ค!
ํด๋์ค๋ ์ ๊ทผ์ ์ด์์ ํจ๊ป classํค์๋๋ฅผ ์ฌ์ฉํด์ ์ ์ํ ์ ์๋ค.
[์ ๊ทผ ์ ์ด์] class XXX{
ํ๋
์์ฑ์
๋ฉ์๋
}
๋ง์ฝ public class๋ก ํด๋์ค๋ฅผ ์ ์ํ๋ฉด ํด๋น ์์ค์ฝ๋(.java)์ ์ด๋ฆ์ ๋ฐ๋์ ํด๋น ํด๋์ค์ ์ด๋ฆ์ผ๋ก ์์ฑ๋์ด์ผ ํ๋ค.
ex) public class Baemung ==> Baemung.java
๊ทธ๋ฆฌ๊ณ ํด๋์ค๋ฅผ ์ ์ํ ๋, ํด๋์ค ์ด๋ฆ ์ฒซ๊ธ์๋ ๋ณดํต ๋๋ฌธ์๋ก ์์ํ๋ ํ์ค์นผ ํ๊ธฐ๋ฒ(PascalCase) ๋ฅผ ์ฌ์ฉํ๋ค.
ํด๋์ค์์ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์ ์ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
์ด๋ ๊ฒ ํ๋์ ํด๋์ค ํ์ผ์ ์ฌ๋ฌ ํด๋์ค๋ฅผ ์ ์ํ์ ๋ ์์ค์ฝ๋๋ฅผ ์ปดํ์ผํ๋ฉด ๊ฐ ํด๋์ค๋ง๋ค .class ํ์ผ์ด ์์ฑ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
ํด๋์ค๋ฅผ ์ ์ํ ๋ ๊ฐ์ฒด๋ค์ ์์ฑ๊ณผ ํ์๋ฅผ ํ๋์ ๋ฉ์๋๋ก ์ ์ํ ์ ์๋ค.
๊ฐ์ฒด | ํด๋์ค |
---|---|
์์ฑ | ํ๋ (ํด๋์ค๋ณ์(static), ์ธ์คํด์ค๋ณ์(non-static)) |
ํ์ | ๋ฉ์๋ |
- ์ฌ๋ (๊ฐ์ฒด)
- ์์ฑ : ์ด๋ฆ, ๋์ด
- ํ์ : ๋์ด๋จน๊ธฐ, ์ ์๊ธฐ,,,
- Person (ํด๋์ค)
Person.java
public class Person{
//field
String name;
int age;
//constructor
Person(String name, int age){
this.name = name;
this.age = age;
}
//method
increaseAge(){}
Sleep(){}
}
๐ก ํด๋์ค ๊ตฌ์ฑ
1. ํ๋(field)
ํด๋์ค์ ํ๋(field)๋ ํด๋์ค์ ํฌํจ๋ ๋ฉค๋ฒ ๋ณ์(variable)
- ํด๋์ค ๋ณ์(static variable)
- ํด๋์ค์ ์ํ
- ํด๋์ค ๋ฉ๋ชจ๋ฆฌ ๋ก๋์ 1๋ฒ๋ง ํ ๋น
- ์ธ์คํด์ค ๋ณ์(instance variable)
- ๊ฐ์ฒด์ ์ํ
- ๊ฐ์ฒด ์์ฑ์๋ง๋ค ํ ๋น
2. ๋ฉ์๋(method)
ํด๋์ค์์ ๋ฉ์๋(method)๋ ์ด๋ ํ ํน์ ์์ ์ ์ํํ๊ธฐ ์ํ ๋ช ๋ น๋ฌธ์ ์งํฉ
- ํด๋์ค ๋ฉ์๋(static method)
- ํด๋์ค ๊ด์ ์์์ ํ์
- ๊ฐ์ฒด ์๋ณ์ ํด์ผ๋งํ๋ ์์ X
- ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ์คํํ ์ ์๋ ์์
- ์ธ์คํด์ค ๋ฉ์๋(instance method)
- ๊ฐ์ฒด ๊ด์ ์์์ ํ์
- ๊ฐ์ฒด ์๋ณ์ ํด์ผ๋ง ํ๋ ์์ O
- ๊ฐ์ฒด ๊ด๋ จ ์์
3. ์์ฑ์(constructor)
ํด๋์ค๋ฅผ ์์ฑํ ๋, ํ๋(์ธ์คํด์ค ๋ณ์) ๊ฐ๋ค์ ์ด๊ธฐํ ์ํค๊ธฐ ์ํ ํน๋ณํ ๋ฉ์๋
๊ฐ์ฒด ์ด๊ธฐํ์ ๋ค์์ฑ ์ ๊ณต
4. ์ค์ฒฉ ํด๋์ค(Nested Class, Inner Class)
- ํด๋์ค ์ ํด๋์ค
5. Initializer
- Static Initializer
static{ ์คํ๋ฌธ์ฅ } : ํด๋์ค ๋ฉ๋ชจ๋ฆฌ ๋ก๋์ ์๋์คํ
- Instance Initializer
{ ์คํ๋ฌธ์ฅ } : ๊ฐ์ฒด ์์ฑ์ ๋ง๋ค ์๋์คํ --> ์์ฑ์ ๋๋ฌธ์ ์ ์ฌ์ฉ ์ํจ
๐ก ํด๋์ค ์์ฑ
- ํจํค์ง ์ ์ธ๋ฌธ (0 or 1)
package top.sub....;
// ๋ฌผ๋ฆฌ์ : ํด๋
// ๋ณดํต domain name(Unique!) ์ญ์์ฌ์ฉ
- import๋ฌธ (0 ~ ๅค)
import top.sub...ํด๋์ค์ด๋ฆ; // ์์ค ํด๋์ค๋ช
๋ฐ๋ก์ฌ์ฉ
import top.sub...*; // all classes, interfaces
(not package) : import๋จ์๋ ํจํค์ง ์๋!
ํ ํด๋์ค์์์ ์ฐธ์กฐ, ์ฌ์ฉํ๋ ํด๋์ค๊ฐ ์์ ๊ณผ ๊ฐ์ ํจํค์ง๊ฐ ์๋ ๊ฒฝ์ฐ ๋ช
์
๋จ, java.lang์ ์๋์ผ๋ก ๋ถ๋ฌ์ด
- class ์ ์ (1 ~ ๅค)
** []๋ ์ํฉ์ ๋ฐ๋ผ ์๋ต๊ฐ๋ฅํจ
* ํด๋์ค์ ์
[์ ๊ทผ์ง์ ์] [ํ์ฉ์ง์ ์] class ํด๋์ค๋ช
[extends ๋ถ๋ชจํด๋์ค๋ช
] [implements ๋ถ๋ชจ์ธํฐํ์ด์ค๋ช
,,,] { }
// ์ ๊ทผ์ง์ ์
(default),public
// ํ์ฉ์ง์ ์
final : ์์๊ธ์ง
abstract : ์ถ์ํด๋์ค (๋ฏธ์์ฑํด๋์ค)
// ํด๋์ค๋ช
๋ช
์ฌํ, ์ฒซ๊ธ์ ๋๋ฌธ์, ์นด๋ฉํ๊ธฐ๋ฒ
// extends
ํด๋์ค ๋จ์ผ์์
// implements
์ธํฐํ์ด์ค ๋ค์ค์์
* ๋ฉค๋ฒ์ ์
[์ ๊ทผ์ง์ ์] [ํ์ฉ์ง์ ์] DataType ๋ณ์๋ช
[=์ด๊ธฐ๊ฐ];
// ์ ๊ทผ์ง์ ์
public,protected,(default),private
// ํ์ฉ์ง์ ์
static : ํด๋์ค๋ฉค๋ฒ
final : ์์ํ, ์์ฑ์์์ ์ด๊ธฐํ ํ์
static final : ์ด์ฐจํผ ์์์ด๊ธฐ ๋๋ฌธ์ static์ผ๋ก ์ฌ์ฉ
transient : ๊ฐ์ฒด์ง๋ ฌํ ๋์์ ์ธ
// ๋ณ์๋ช
๋ช
์ฌํ, ์ฒซ๊ธ์ ์๋ฌธ์, ์นด๋ฉํ๊ธฐ๋ฒ
// ์ด๊ธฐ๊ฐ
์๋ต์ default๊ฐ์ผ๋ก ์ด๊ธฐํ (0, null, false)
* ๋ฉ์๋์ ์
[์ ๊ทผ์ง์ ์] [ํ์ฉ์ง์ ์] returnType ๋ฉ์๋๋ช
([๋งค๊ฐ๋ณ์์ ์ธ,,,]) [throws Exception๋ช
,,,]
{
์คํ๋ฌธ์ฅ
[return ๋ฆฌํด๊ฐ]
}
// ์ ๊ทผ์ง์ ์
public,protected,(default),private
// ํ์ฉ์ง์ ์
static : ๊ฐ์ฒด ์์ฑ์์ด 'ํด๋์ค์ด๋ฆ.๋ฉ์๋์ด๋ฆ()'์ผ๋ก ํธ์ถ ๊ฐ๋ฅ, ๋ฉ์๋ ๋ด์์ ์ธ์คํด์ค ๋ณ์ ์ฌ์ฉ ๋ถ๊ฐ
final : ๋ฉ์๋ ์ฌ์ ์ X
synchronized : ๊ฐ์ฒด ๋๊ธฐํ๋ฅผ ์ํ ์ ๊ธ
abstract : ๋ฉ์๋ ์ถ์ํ
// return ๋ฆฌํด๊ฐ
void : ์์ -> return๋ฌธ ์๋ต๊ฐ๋ฅ
not void : return๊ฐ ๋ช
์
* ์์ฑ์
[์ ๊ทผ์ง์ ์] ํด๋์ค๋ช
([๋งค๊ฐ๋ณ์์ ์ธ,,,]) [throws Exception๋ช
,,,] {}
// ์ ๊ทผ์ง์ ์
public,protected,(default),private
๐ก new ํค์๋
๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ new ๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
new ํค์๋๋ ๋ฉ๋ชจ๋ฆฌ์์ ๊ณต๊ฐ์ ํ ๋นํ๊ณ , ํ ๋น๋ฐ์ ๊ณต๊ฐ์ ์ฃผ์๊ฐ์ ๋ฐํํ๋ค.
์๋ฐ์์ Primitive Type์ ์ ์ธํ ํ์ ์ฆ, Reference Type์ ๋ณ์๋ฅผ ์ด๊ธฐํ ์ํค๋ฉด ๊ฐ์ฒด๋ฅผ Heap ์์ญ์ ์ ์ฅํ๊ณ ๋ ํผ๋ฐ์ค ํ์ ์ ๋ณ์์๋ new ํค์๋๊ฐ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ Stack ์์ญ์ ์ ์ฅ๋๋ค.
new๋ผ๋ ํค์๋๋ ๋ฉ๋ชจ๋ฆฌ์์ ๊ณต๊ฐ์ ํ ๋นํ๊ณ , ํ ๋น๋ฐ์ ๊ณต๊ฐ์ ์ฃผ์๋ฅผ ๋ฆฌํดํ๋ค.
// ํด๋์ค์ด๋ฆ ์ฐธ์กฐ๋ณ์ = new ์์ฑ์ํธ์ถ; -> ๊ฐ์ฒด์์ฑ์ ์ด๊ธฐํ๋ฅผ ๋ด๋นํ๋ ํน๋ณํ ๋ฉ์๋
Person p1 = new Person("๋ฐฐ๋ฌธ๊ท", 29);
Person p2 = new Person("์ ๋ค์ด", 29);
์ ์์ค์ฝ๋๋ฅผ ์คํํ๋ฉด
-
Class Area์ Person ๋ฐ์ดํธ์ฝ๋๊ฐ ์ฌ๋ผ๊ฐ
-
new ํค์๋๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ๊ณต๊ฐ์ ํ ๋นํ์ฌ Heap์ ์ธ์คํด์ค ๋ณ์๊ฐ ์ฌ๋ฆผ
-
new ํค์๋๊ฐ ์ธ์คํด์ค๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ฆฌํดํ์ฌ Stack์ p1, p2 ๋ ํผ๋ฐ์ค ๋ณ์๋ฅผ ์ ์ฅํด์ ์ฌ๋ฆผ
๐ก this ํค์๋
- non-static ์์ญ(instance ๋ฉ์๋, ์์ฑ์, instance initializer)์์ ์ฌ์ฉํจ.
- ํ์ฌ ์์ฑ์ค์ธ, ์คํ์ค์ธ ๊ทธ ๊ฐ์ฒด ์๊ธฐ์์ ์ ์ผ์ปซ์.
์ฌ์ฉ๋ฒ
1. ์ง์ญ๋ณ์์ ์ธ์คํด์ค๋ณ์๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด์
void setName(String name){
this.name=name;
}
2. ์์ฑ์๊ฐ ์ค๋ฒ๋ก๋ฉ๋ ๊ฒฝ์ฐ, ์์ ์ ๋ ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถ ์ this๋ฅผ ๋ถ๋ฅผ ์ ์๋ค.
this();
3. ์๊ธฐ ์์ ์ ๊ฐ์ฒด๋ฅผ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๊ฑฐ๋ ๋ฆฌํดํ๊ธฐ ์ํด์
XXX(){
return this; // ์๊ธฐ ์์ ์ ๋ฆฌํด
}
YYY(){
obj.zzz(this); // ์๊ธฐ ์์ ์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ
}
๐ก super ํค์๋
- this์ ๋ง์ฐฌ๊ฐ์ง๋ก non-static ์์ญ(instance ๋ฉ์๋, ์์ฑ์, instance initializer)์์ ์ฌ์ฉํจ.
- ํ์ฌ ์์ฑ์ค์ธ, ์คํ์ค์ธ ๊ฐ์ฒด์ ๋ถ๋ชจ๋ฅผ ์๋ฏธํ๋๋ก ์ฌ์ฉํ๋ ๋ ผ๋ฆฌ์ ์ธ ๊ฐ๋
์ฌ์ฉ๋ฒ
1. ์์ ์ ๋ฉ์๋์ ๋ถ๋ชจ์ ๋ฉ์๋๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ฌ์ฉ(๋ฉ์๋ ์ฌ์ ์ ์ํฉ)
this.XXX()
super.XXX()
// ์ฐธ๊ณ ๋ก, ๋ฉ์๋ ๋ง๊ณ ๋ฉค๋ฒ๋ ๊ฐ๋
์ ์ผ๋ก ๊ตฌ๋ถํ์ง ์์
// ๋ถ๋ชจ์ ๋ฉค๋ฒ๋ ์์์๊ฒ๋ ์๊ธฐ ๋๋ฌธ์
2. ์์์ ์์ฑ์์์ ๋ถ๋ชจ ์์ฑ์๋ฅผ ๋ช ์์ ์ผ๋ก ํธ์ถํ๊ธฐ ์ํด ์ฌ์ฉ
super();
this์ 3๋ฒ ๊ฐ๋ ์ super์ ์๋ค. (์์ ํ์๊ฐ ์๋ค.)
์ถ์ ํด๋์ค
์ถ์ ํด๋์ค๋ฅผ ์ ์ธํ๋ ๋ฐฉ๋ฒ์ classํค์๋ ์์ abstract ๋ฅผ ๋ถํ์ ์ ์ธํ ์ ์๋ค.
์ถ์ ํด๋์ค๋ ๋ฏธ์์ฑ ํด๋์ค๋ก newํค์๋๋ก ๋ค์ด๋ ํธ ๊ฐ์ฒด ์์ฑ์ด ๋ถ๊ฐ๋ฅํ๊ณ ๋ฐ๋์ ํ์ ํด๋์ค๋ฅผ ํ์๋กํ๋ค.
๋์ ์์ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ณ์๋ก ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
์ธํฐํ์ด์ค์์ ์ ์ธํ ์ ์๋ ๋ณ์๋ ๊ตฌํ๋ ๋ฉ์๋๋ฅผ ํฌํจ์ํฌ ๋ ์ฌ์ฉํ๋ค.
์ถ์ํด๋์ค๋ ๊ฒฐ๊ตญ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ ๋จ์ผ์์๋ง ๊ฐ๋ฅํ๋ค.
์ถ์ ํด๋์ค๋ 2๊ฐ์ง๋ก ๊ตฌ๋ถํ ์ ์๋ค.
-
์ถ์ ๋ฉ์๋๊ฐ ์๋ ์ถ์ ํด๋์ค
- ํด๋น ํด๋์ค์ ๊ฐ์ฒด์์ฑ์ ๋ง์ ๋ ์ฌ์ฉ
- ์์ ๋ฐ๋ ์์ ํด๋์ค์์ ๊ฐ๋ณ์ ์ธ ํน์ฑ์ ์ถ๊ฐ์ ์ผ๋ก ๋ถ์ฌํ ํ ๊ฐ์ฒด ์์ฑ
-
์ถ์ ๋ฉ์๋๊ฐ ์๋ ์ถ์ ํด๋์ค
- ํด๋น ์ถ์ ํด๋์ค๋ฅผ ์์๋ฐ๋ ์์ ํด๋์ค์์ ์ถ์ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ ํ์
- ์์ ํด๋์ค์๊ฒ ์ถ์ ๋ฉ์๋์ ์ค๋ฒ๋ผ์ด๋ฉ ๊ฐ์ ์ฑ์ ๋ถ์ฌํ์ฌ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ํฅ์
- ์ถ์ ๋ฉ์๋๊ฐ ์กด์ฌํ๋ฉด ๋ฐ๋์ ํด๋น ํด๋์ค๋ ์ถ์ ํด๋์ค
์ฐธ๊ณ ๋ก, ์ต์์ ํด๋์ค๋ฅผ ์์๋ฐ๋ ์ค๊ฐ ํด๋์ค์์ ์ต์์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ถ์๋ฉ์๋๋ก ์ค๋ฒ๋ผ์ด๋ฉ์ ํ ์ ์๋ค.
์ต์์ํด๋์ค์์ ์๋ ์๋ฌด์ฑ์ ์ค๊ฐ ํด๋์ค์์ ์๋๋ก ๋ถ์ฌํ ์๋ ์๋ค.
๐ฎ๐ณ ์ธํฐํ์ด์ค
๐ก ์ธํฐํ์ด์ค ์ ์
์ธํฐํ์ด์ค๋, ์ด๋ ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํ ์ผ์ข
์ ํ์ค(์ฝ์, ๋ฐฉ๋ฒ) ์ด๋ค.
์ธํฐํ์ด์ค๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ๊ด์ ๊ณผ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ ๊ณต์ ๊ด์ ์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
๊ธฐ๋ฅ ์ฌ์ฉ์ ๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ฌ์ฉ๋ฐฉ๋ฒ์ ์ ์ ์์ผ๋ฉฐ, ์ธํฐํ์ด์ค์ ์ ํ ์๋๋๋ก๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
๋ํ, ์ ๊ณต์๊ฐ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง์ ๋ํด ์์ธํ ์ ํ์๊ฐ ์์ด ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๋ฉฐ ๋ชจ๋ํ๊ฐ ๊ฐ๋ฅํด์ง๋ค.
๊ธฐ๋ฅ ์ ๊ณต์ ๋ ์ด ๊ธฐ๋ฅ๋ค์ ๊ผญ ๊ตฌํํด์ผ๋ง ์ฑ ์์ด ๋ถ์ฌ๋์ง๋ง ์์ ์ ์ฝ๋๋ฅผ ๋ ธ์ถํ์ง ์์๋ ๋๋ค๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค.
- ์ฌ์ฉ์ ๊ด์ : ์ฌ์ฉ๋ฐฉ๋ฒ, ์ฝ์
- ์ ๊ณต์ ๊ด์ : ๊ตฌํ์ ์ฑ ์
๊ตฌํ์ ๊ฐ์ ํ๋ก ์๋ก ๋ค๋ฅธ ๋ชจ๋์ด ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ค๋ฉด ์ฌ์ฉ์๋ค์ ์์ฝ๊ฒ ๋ชจ๋ ๊ต์ฒด๊ฐ ๊ฐ๋ฅ
์๋ก ์์ ๊ด๊ณ๊ฐ ์๋ ๊ฐ์ ์ ์ธ ํด๋์ค๋ค์๊ฒ ์ธํฐํ์ด์ค๋ฅผ ํตํ ๊ด๊ณ ๋ถ์ฌ๋ก ๋คํ์ฑ ํ์ฅ ๊ฐ๋ฅ
๐ก ์ธํฐํ์ด์ค ๊ตฌํ
ํด๋์ค๋ฅผ ๊ตฌํํ ๋ classํค์๋๋ฅผ ์ฌ์ฉํ์ง๋ง, ์ธํฐํ์ด์ค๋ interface๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
** []๋ ์ํฉ์ ๋ฐ๋ผ ์๋ต๊ฐ๋ฅํจ
* ์ธํฐํ์ด์ค ์ ์
[์ ๊ทผ์ง์ ์] interface ์ธํฐํ์ด์ค๋ช
[extends ๋ถ๋ชจ ์ธํฐํ์ด์ค๋ช
]{ }
// ์ ๊ทผ์ง์ ์
(default),public
// ํด๋์ค๋ ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ ๋ implementsํค์๋๋ฅผ ์ฌ์ฉํ์ง๋ง,
// ์ธํฐํ์ด์ค๊ฐ ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ ๋๋ extendsํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
interface ์ธํฐํ์ด์ค๋ช
{
// 1. ์์
[public static final]ํ์
์์๋ช
= ์์๊ฐ;
// 2. ์ถ์ ๋ฉ์๋
[public abstract]ํ์
๋ฉ์๋๋ช
(๋งค๊ฐ๋ณ์);
// 3. ๋ํดํธ ๋ฉ์๋
default ํ์
๋ฉ์๋๋ช
(๋งค๊ฐ๋ณ์){
// ๊ตฌํ
}
// 4. ์คํํฑ ๋ฉ์๋
static ํ์
๋ฉ์๋๋ช
(๋งค๊ฐ๋ณ์){
// ๊ตฌํ
}
}
Java 8 ์ด์ ๊น์ง๋ ์์์ ์ถ์ ๋ฉ์๋๋ง ์ ์ธ ๊ฐ๋ฅํ์์ง๋ง,
Java 8 ์ดํ๋ถํฐ๋ ๋ํดํธ ๋ฉ์๋์ ์คํํฑ ๋ฉ์๋๊ฐ ์ถ๊ฐ๋์๋ค.
- ์์ (์ ๋) : ์ธํฐํ์ด์ค์์ ๊ณ ์ ๋ ๊ฐ๋ง ์ ๊ณต.
- ์ถ์ ๋ฉ์๋ (๊ฐ์ ) : ์ธํฐํ์ด์ค์์ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํ๊ณ ์์๋ฐ์ ์ค๋ฒ๋ผ์ด๋ฉํด์ ๊ตฌํ.
- ๋ํดํธ ๋ฉ์๋ (์ ํ) : ์ธํฐํ์ด์ค์์ ๊ตฌํ ๋ฉ์๋ ์ ๊ณต, ์ค๋ฒ๋ผ์ด๋ฉ ๊ฐ๋ฅ
- ์คํํฑ ๋ฉ์๋ (์ ๋) : ์ธํฐํ์ด์ค์์ ๊ตฌํ ๋ฉ์๋ ์ ๊ณต, ์ค๋ฒ๋ผ์ด๋ฉ ๋ถ๊ฐ
๊ทผ๋ณธ์ ์ผ๋ก ์ถ์ ํด๋์ค๋ ํด๋์ค์ด๋ฏ๋ก "is-a : ~๋ ~์ด๋ค." ๊ด๊ณ ์ด๊ธฐ ๋๋ฌธ์ ๋จ์ผ ์์๋ง ๊ฐ๋ฅํ ๊ฒ์ด๊ณ ,
์ธํฐํ์ด์ค๋ ํด๋์ค๊ฐ ์๋๋ฏ๋ก "has-a : ~๋ ~๋ฅผ ํ ์ ์๋ค." ๊ด๊ณ ์ด๊ธฐ ๋๋ฌธ์ ๋ค์ค ์์์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
// Baemung์ ์ฌ๋์ด๋ฉฐ ์์ง์ผ ์ ์๊ณ , ๋ค์ ์ ์๊ณ , ๊ฐ๋ฐํ ์ ์๋ค.
class Baemung extends Person implements Movable, Hearable, Developable
๋คํ์ฑ์ ์กฐ์ํด๋์ค์ ์กฐ์์ธํฐํ์ด์ค ๋ชจ๋ ์ ์ฉ ๊ฐ๋ฅ
class IronMan implements Heroble, Fightable, Transformable {}
IronMan tony = new IronMan();
Object obj = tony;
Heroable hero = tony;
Fightable fighter = tony;
Transformable trans = tony;
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([Become a Java-Masta๐จโ๐ซ 4์ฃผ์ฐจ] ํด๋์ค, ์ธํฐํ์ด์ค), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@bae_mung/Become-a-Java-Masta-4์ฃผ์ฐจ-ํด๋์ค-์ธํฐํ์ด์ค์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค