๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java

[JAVA] ๊ฐ์ฒด

by ๋Œ€๋ณต2 2024. 7. 16.

 

 

๊ฐ์ฒด

๊ฐ์ฒด๋ž€ ๋‘ ๊ฐ€์ง€ ์˜๋ฏธ๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.

1. ์ž์‹ ์˜ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด์„œ ์‹๋ณ„์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ

2. ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•œ ๊ฒƒ์„ ํ† ๋Œ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๊ฒƒ

 

 

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object-Oriented Programing, OOP)

์ฃผ๋ณ€์˜ ์‚ฌ๋ฌผ์ด๋‚˜ ์ถ”์ƒ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ณ , ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์˜ ํŠน์ง•์œผ๋กœ๋Š”

- ์ถ”์ƒํ™”(Abstruction): ํ˜„์‹ค์˜ ๊ฐ์ฒด๋ฅผ ์ถ”์ƒํ™”( ๋ณธ์งˆ์ ์ด๊ณ  ๊ณตํ†ต์ ์ธ ๋ถ€๋ถ„์„ ๋ชจ์•„ ์ •์˜ํ•˜๋Š” ๊ฒƒ)

- ๋‹คํ˜•์„ฑ(Polymorphism): ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ์ฐธ์กฐ

- ์ƒ์†(Inheritance): ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ž์‹ ํด๋ž˜์Šค๋กœ ์ •์˜ํ•˜์—ฌ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ

- ์บก์Аํ™”(Encapsulation): ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ฒŒ ๋ณดํ˜ธ

 

=> ํ˜„์‹ค์˜ ๊ฐ์ฒด๋Š” ์ถ”์ƒํ™” ๋˜์–ด ํด๋ž˜์Šค๋กœ ์ •์˜๋˜๊ณ , ํด๋ž˜์Šค๋Š” ๊ตฌ์ฒดํ™”๋˜์–ด ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค.

 

 

 

 

ํด๋ž˜์Šค(Class)? ๊ฐ์ฒด(Object)? ์ธ์Šคํ„ด์Šค(Instance)?

- ํด๋ž˜์Šค: ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„(ํ‹€)

- ๊ฐ์ฒด: SW ์„ธ๊ณ„์— ๊ตฌํ˜„ํ•  ๋Œ€์ƒ

- ์ธ์Šคํ„ด์Šค: ์„ค๊ณ„๋„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SW ์„ธ๊ณ„์— ๊ตฌํ˜„๋œ ๊ตฌ์ฒด์ ์ธ ์‹ค์ฒด

=> ๊ฐ์ฒด๋ž€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ด๋‹ค.

๋ณดํ†ต ํŠน์ • ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๋ฉด ๊ฐ์ฒด๋ผ๊ณ  ํ•˜๊ณ  ์‹ค์งˆ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด(new) ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

/* ํด๋ž˜์Šค */
public class Animal {
  ...
}
/* ๊ฐ์ฒด์™€ ์ธ์Šคํ„ด์Šค */
public class Main {
  public static void main(String[] args) {
    Animal cat, dog; // '๊ฐ์ฒด'

    // ์ธ์Šคํ„ด์Šคํ™”
    cat = new Animal(); // cat์€ Animal ํด๋ž˜์Šค์˜ '์ธ์Šคํ„ด์Šค'(๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น)
    dog = new Animal(); // dog์€ Animal ํด๋ž˜์Šค์˜ '์ธ์Šคํ„ด์Šค'(๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น)
  }
}

 

 

 

JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ( meta-space, Call Stack, Heap)

- meta-space: ํด๋ž˜์Šค์˜ ์ •๋ณด์™€ static ๋ณ€์ˆ˜๋“ค์„ ์—ฌ๊ธฐ์— ์ €์žฅํ•œ๋‹ค.

- Call Stack: ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฉ”์„œ๋“œ๋Š” Call Stack์— ์˜ฌ๋ผ๊ฐ€๊ณ , ๋๋‚œ ๋’ค ์‚ญ์ œ

- Heap: ํด๋ž˜์Šค๋กœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ํ• ๋‹นํ•  ๋•Œ ์ €์žฅ๋˜๋Š” ๊ณณ์ด ์—ฌ๊ธฐ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์—ฐ๊ด€๋œ ์ด์•ผ๊ธฐ๋กœ ์ง€์—ญ ๋ณ€์ˆ˜์˜ ๋ช…์‹œ์  ์ดˆ๊ธฐํ™”๊ฐ€ ์žˆ๋‹ค. ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋“ค๊ณผ ๋‹ฌ๋ฆฌ ๋ช…์‹œ์  ์ดˆ๊ธฐํ™”๊ฐ€ ํ•„์ˆ˜์ ์ธ๋ฐ Call Stack์— ๋นˆ๋ฒˆํ•˜๊ฒŒ ์‚ฝ์ž…, ์‚ญ์ œ๋˜๋Š” ๊ณผ์ •์—์„œ ์ž๋™์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ฃผ๋ฉด ์—ฐ์‚ฐ์ด ๋งŽ์•„์ ธ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฏ€๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ์—†์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

 

Static

- ํ•œ๋งˆ๋””๋กœ ์ •์˜ํ•˜์ž๋ฉด ๊ณต์œ  ๋ณ€์ˆ˜ or ๋ฉ”์„œ๋“œ

- ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ–ˆ์„ ๋•Œ, Static์€ ๋จผ์ € ์„ ์–ธ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋“ค์ด ๊ณต์œ ํ•˜๋Š” ๊ฐ’์ž„

- ๋ฐ˜๋ฉด Static์ด ์—†๋Š” ๋งด๋ฒ„ ๋ณ€์ˆ˜๋“ค์€ ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ธ์„ ๋•Œ ์„ ์–ธ

- ๋‹จ ๊ทธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ๋ฐฐ์ œ๋จ

 

 

 

 

Method

- ํŠน์ •ํ•œ ๊ฐ์ฒด ๋‚ด์— ์ข…์†๋œ ์„œ๋ธŒ ๋ฃจํ‹ด

- ๊ฐ์ฒด์— ์ข…์†๋œ๋‹ค๋Š” ์ ์ด Function๊ณผ์˜ ์ฐจ์ด์ (์ž๋ฐ”๋Š” Function ๋ฏธ์ง€์›)

 

Variable argument: ๋ฉ”์„œ๋“œ ์„ ์–ธ ์‹œ ๋™์ผ ํƒ€์ž… ์ธ์ž์˜ ์ˆ˜๋ฅผ ๊ฐ€๋ณ€์ ์œผ๋กœ ์ ์šฉํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

- (์ž๋ฃŒํ˜•)...paramsํ˜•์‹์œผ๋กœ ์‚ฌ์šฉ

public class VariableArgsTest {
    public static void main(String[] args) {
        VariableArgsTest vt = new VariableArgsTest();
        vt.variableArgs(1, 2, 3); // 6
        vt.variableArgs(1, 2, 3, 4, 5); // 15
        vt.variableArgs(1, 2); // 3
    }

    public void variableArgs(int... params) {
        int sum = 0;
        for (int i : params) {
            sum += i;
        }
        System.out.println(sum);
    }

}

 

 

 

 

์˜ค๋ฒ„๋กœ๋”ฉ

- ๋™์ผํ•œ ๊ธฐ๋Šฅ(์ด๋ฆ„)์„ ๊ฐ€์ง„ ๋ฉ”์„œ๋“œ๋ฅผ ํƒ€์ž…์ด๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•˜์—ฌ ์ถ”๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ

- ๋ช…์‹œ๋ฅผ ํ™•์‹คํ•˜๊ฒŒ ํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ

#1: ๋™์ผ ํด๋ž˜์Šค, ๋™์ผ ์ด๋ฆ„์œผ๋กœ ๊ตฌ์„ฑํ•  ๊ฒƒ

#2: ์ „๋‹ฌ ์ธ์ž์˜ ๊ฐœ์ˆ˜์™€ ํƒ€์ž…์€ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•  ๊ฒƒ

#3: ๋ฐ˜ํ™˜ ํƒ€์ž…๊ณผ ์ ‘๊ทผ ์ œํ•œ์ž๋Š” ์ƒ๊ด€ ์—†์Œ

 

 

 

 

 

์ƒ์„ฑ์ž

- ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํŠน์ˆ˜ ๋ชฉ์ ์˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜๋กœ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด ๋ชฉ์ 

- ์ƒ์„ฑ์ž๋Š” ํด๋ž˜์Šค์˜ ์ด๋ฆ„๊ณผ ๋™์ผํ•ด์•ผ ํ•œ๋‹ค.

- ๋ฐ˜ํ™˜ ํƒ€์ž…์ด ์—†์œผ๋ฉฐ, ๋งค๊ฐœ๋ณ€์ˆ˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.(๋ฐ˜ํ™˜ ํƒ€์ž…์ด ์žˆ์œผ๋ฉด ๋ฉ”์„œ๋“œ๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค.-> ์—๋Ÿฌ ์•ˆ ๋œธ)

- ํด๋ž˜์Šค์— ์ตœ์†Œ 1๊ฐœ๋Š” ์กด์žฌํ•ด์•ผ ํ•˜๋ฉฐ, ๋”ฐ๋กœ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

* ๋‹จ ์ƒ์„ฑ์ž ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ์ˆœ๊ฐ„, ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” ์—†์–ด์ง€๊ฒŒ ๋˜๋ฏ€๋กœ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋„ ๊ฐ™์ด ๋งŒ๋“ค์–ด ์ค˜์•ผ ํ•œ๋‹ค.

 

 

 

 

This

- ์ฐธ์กฐ ๋ณ€์ˆ˜๋กœ์„œ ๊ฐ์ฒด ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ด -> ์ธ์Šคํ„ด์Šคํ™”๋œ ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉ

- ์ž๊ธฐ ์ž์‹  ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉค๋ฒ„๋ฅผ ์ฐพ์•„๊ฐ -> ์—†์œผ๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค๋„ ์ฐพ์•„๊ฐ€ ๋ด„

- ์ฃผ๋กœ ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ด ๊ฐ™์„ ๋•Œ, ๋งด๋ฒ„ ๋ณ€์ˆ˜์ž„์„ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

- Static์œผ๋กœ ์„ ์–ธ๋œ ํ•จ์ˆ˜์—์„œ๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค(Mainํ•จ์ˆ˜ ๊ฐ™์€ ๊ฑฐ)

 

-> ์ƒ์„ฑ์ž์˜ ์˜ค๋ฒ„๋กœ๋”ฉ์€ ์ด๋ฆ„ ๋Œ€์‹  this๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. this๋Š” ์ƒ์„ฑ์ž์˜ ์ฒซ ์ค„์—๋งŒ ์‚ฌ์šฉ

 

 

 

'Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JAVA] ์ฝ”๋“œ ์™ธ ์ž‘์„ฑํ•  ๊ฒƒ๋“ค  (0) 2024.07.17
[JAVA] ์ƒ์†  (0) 2024.07.17
[JAVA] ์ž๋ฃŒ๊ตฌ์กฐ  (0) 2024.07.15
[JAVA] ๋ณ€์ˆ˜  (0) 2024.07.15
[JAVA] ์ž๋ฐ” ์ž…๋ฌธ  (0) 2024.07.10