[Become a Java-Masta๐Ÿ‘จโ€๐Ÿซ 4์ฃผ์ฐจ] ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค

26578 ๋‹จ์–ด JavaTILJava

๐ŸŽฏ ๋ชฉํ‘œ

์ž๋ฐ”์˜ 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);

์œ„ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด

  1. Class Area์— Person ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ์˜ฌ๋ผ๊ฐ

  2. new ํ‚ค์›Œ๋“œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜์—ฌ Heap์— ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊ฐ€ ์˜ฌ๋ฆผ

  3. 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๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†๋Š” ์ถ”์ƒ ํด๋ž˜์Šค

    • ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์ƒ์„ฑ์„ ๋ง‰์„ ๋•Œ ์‚ฌ์šฉ
    • ์ƒ์† ๋ฐ›๋Š” ์ž์‹ ํด๋ž˜์Šค์—์„œ ๊ฐœ๋ณ„์ ์ธ ํŠน์„ฑ์„ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ถ€์—ฌํ•œ ํ›„ ๊ฐ์ฒด ์ƒ์„ฑ
  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 ์ดํ›„๋ถ€ํ„ฐ๋Š” ๋””ํดํŠธ ๋ฉ”์†Œ๋“œ์™€ ์Šคํƒœํ‹ฑ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

  1. ์ƒ์ˆ˜ (์ ˆ๋Œ€) : ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๊ณ ์ •๋œ ๊ฐ’๋งŒ ์ œ๊ณต.
  2. ์ถ”์ƒ ๋ฉ”์†Œ๋“œ (๊ฐ•์ œ) : ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๊ฐ€์ด๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ƒ์†๋ฐ›์•„ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ๊ตฌํ˜„.
  3. ๋””ํดํŠธ ๋ฉ”์†Œ๋“œ (์„ ํƒ) : ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๊ตฌํ˜„ ๋ฉ”์†Œ๋“œ ์ œ๊ณต, ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๊ฐ€๋Šฅ
  4. ์Šคํƒœํ‹ฑ ๋ฉ”์†Œ๋“œ (์ ˆ๋Œ€) : ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๊ตฌํ˜„ ๋ฉ”์†Œ๋“œ ์ œ๊ณต, ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ถˆ๊ฐ€

๊ทผ๋ณธ์ ์œผ๋กœ ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค์ด๋ฏ€๋กœ "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;

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ