์๋ฐ์์ ํด๋์ค๋ ์ ์ฌํ ํน์ง๋ค์ ์ง๋ ๊ฐ์ฒด๋ค์ ์์ฑ๊ณผ ํ์๋ค์ ์ ์ํด๋์ ์ค๊ณ๋์ ๊ฐ์ ๊ฒ์ด๋ค.
์ด ์ค๊ณ๋๋ฅผ ์ด์ฉํด์ ๋์ผํ ํน์ง์ ๊ฐ์ฒด๋ฅผ ์ฐ์ด๋ด๋ ํ๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค.
๊ฐ์ฒด : ์ค์ธ๊ณ(Real World)์ ์กด์ฌํ๋ ์ /๋ฌดํ์ ๋ชจ๋ ๊ฒ
์์ฑ(๋ช ์ฌํ)๊ณผ ํ์(๋์ฌํ)๋ฅผ ๊ฐ๋๋ค.
ex) ์๋์ฐจ (์ ํ)
ex) ๊ณ์ข (๋ฌดํ)
ํด๋์ค | ๊ฐ์ฒด |
---|---|
๋ถ์ด๋นตํ | ๋ถ์ด๋นต |
๊ณต์ฅ ์์ฐ๋ผ์ธ | ์ ํ |
๊ฑด๋ฌผ์ค๊ณ๋ | ๊ฑด๋ฌผ |
๊ฐ์ ํด๋์ค๋ก๋ถํฐ ์์ฑ๋ ๊ฐ์ฒด๋ ๋ชจ๋ ๊ฐ์ ์์ฑ๊ณผ ํ์๋ฅผ ๊ฐ์ง๋๋ฐ, ๊ฐ์ฒด๋ง๋ค ๊ณ ์ ํ ์์ฑ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
์ฆ, ๊ฐ์ ํด๋์ค์์ ์์ฑ๋ ๊ฐ์ฒด๋ผ๋ ๋ชจ๋ ๋ค๋ฅด๋ค!
ํด๋์ค๋ ์ ๊ทผ์ ์ด์์ ํจ๊ป classํค์๋๋ฅผ ์ฌ์ฉํด์ ์ ์ํ ์ ์๋ค.
[์ ๊ทผ ์ ์ด์] class XXX{
ํ๋
์์ฑ์
๋ฉ์๋
}
๋ง์ฝ public class๋ก ํด๋์ค๋ฅผ ์ ์ํ๋ฉด ํด๋น ์์ค์ฝ๋(.java)์ ์ด๋ฆ์ ๋ฐ๋์ ํด๋น ํด๋์ค์ ์ด๋ฆ์ผ๋ก ์์ฑ๋์ด์ผ ํ๋ค.
ex) public class Baemung ==> Baemung.java
๊ทธ๋ฆฌ๊ณ ํด๋์ค๋ฅผ ์ ์ํ ๋, ํด๋์ค ์ด๋ฆ ์ฒซ๊ธ์๋ ๋ณดํต ๋๋ฌธ์๋ก ์์ํ๋ ํ์ค์นผ ํ๊ธฐ๋ฒ(PascalCase) ๋ฅผ ์ฌ์ฉํ๋ค.
ํด๋์ค์์ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์ ์ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
์ด๋ ๊ฒ ํ๋์ ํด๋์ค ํ์ผ์ ์ฌ๋ฌ ํด๋์ค๋ฅผ ์ ์ํ์ ๋ ์์ค์ฝ๋๋ฅผ ์ปดํ์ผํ๋ฉด ๊ฐ ํด๋์ค๋ง๋ค .class ํ์ผ์ด ์์ฑ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
ํด๋์ค๋ฅผ ์ ์ํ ๋ ๊ฐ์ฒด๋ค์ ์์ฑ๊ณผ ํ์๋ฅผ ํ๋์ ๋ฉ์๋๋ก ์ ์ํ ์ ์๋ค.
๊ฐ์ฒด | ํด๋์ค |
---|---|
์์ฑ | ํ๋ (ํด๋์ค๋ณ์(static), ์ธ์คํด์ค๋ณ์(non-static)) |
ํ์ | ๋ฉ์๋ |
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(){}
}
ํด๋์ค์ ํ๋(field)๋ ํด๋์ค์ ํฌํจ๋ ๋ฉค๋ฒ ๋ณ์(variable)
ํด๋์ค์์ ๋ฉ์๋(method)๋ ์ด๋ ํ ํน์ ์์ ์ ์ํํ๊ธฐ ์ํ ๋ช ๋ น๋ฌธ์ ์งํฉ
ํด๋์ค๋ฅผ ์์ฑํ ๋, ํ๋(์ธ์คํด์ค ๋ณ์) ๊ฐ๋ค์ ์ด๊ธฐํ ์ํค๊ธฐ ์ํ ํน๋ณํ ๋ฉ์๋
๊ฐ์ฒด ์ด๊ธฐํ์ ๋ค์์ฑ ์ ๊ณต
static{ ์คํ๋ฌธ์ฅ } : ํด๋์ค ๋ฉ๋ชจ๋ฆฌ ๋ก๋์ ์๋์คํ
{ ์คํ๋ฌธ์ฅ } : ๊ฐ์ฒด ์์ฑ์ ๋ง๋ค ์๋์คํ --> ์์ฑ์ ๋๋ฌธ์ ์ ์ฌ์ฉ ์ํจ
package top.sub....;
// ๋ฌผ๋ฆฌ์ : ํด๋
// ๋ณดํต domain name(Unique!) ์ญ์์ฌ์ฉ
import top.sub...ํด๋์ค์ด๋ฆ; // ์์ค ํด๋์ค๋ช
๋ฐ๋ก์ฌ์ฉ
import top.sub...*; // all classes, interfaces
(not package) : import๋จ์๋ ํจํค์ง ์๋!
ํ ํด๋์ค์์์ ์ฐธ์กฐ, ์ฌ์ฉํ๋ ํด๋์ค๊ฐ ์์ ๊ณผ ๊ฐ์ ํจํค์ง๊ฐ ์๋ ๊ฒฝ์ฐ ๋ช
์
๋จ, java.lang์ ์๋์ผ๋ก ๋ถ๋ฌ์ด
** []๋ ์ํฉ์ ๋ฐ๋ผ ์๋ต๊ฐ๋ฅํจ
* ํด๋์ค์ ์
[์ ๊ทผ์ง์ ์] [ํ์ฉ์ง์ ์] 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 ํค์๋๋ ๋ฉ๋ชจ๋ฆฌ์์ ๊ณต๊ฐ์ ํ ๋นํ๊ณ , ํ ๋น๋ฐ์ ๊ณต๊ฐ์ ์ฃผ์๊ฐ์ ๋ฐํํ๋ค.
์๋ฐ์์ 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 ๋ ํผ๋ฐ์ค ๋ณ์๋ฅผ ์ ์ฅํด์ ์ฌ๋ฆผ
์ฌ์ฉ๋ฒ
void setName(String name){
this.name=name;
}
this();
XXX(){
return this; // ์๊ธฐ ์์ ์ ๋ฆฌํด
}
YYY(){
obj.zzz(this); // ์๊ธฐ ์์ ์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ
}
์ฌ์ฉ๋ฒ
this.XXX()
super.XXX()
// ์ฐธ๊ณ ๋ก, ๋ฉ์๋ ๋ง๊ณ ๋ฉค๋ฒ๋ ๊ฐ๋
์ ์ผ๋ก ๊ตฌ๋ถํ์ง ์์
// ๋ถ๋ชจ์ ๋ฉค๋ฒ๋ ์์์๊ฒ๋ ์๊ธฐ ๋๋ฌธ์
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;