Java

๊ฐ์ฒด์ง€ํ–ฅ1

voider 2020. 9. 6. 18:28

๐Ÿ“š ์ž๋ฐ”์˜ ์ •์„์„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ

  1. ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ
  2. ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด
  3. ์‹ ๋ขฐ์„ฑ ๋†’์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํด๋ž˜์Šค์™€ ๊ฐ์ฒด

ํด๋ž˜์Šค๋ž€ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•ด๋†“์€ ์ผ์ข…์˜ ์„ค๊ณ„๋„๋‹ค.

๋„๋Œ€์ฒด ํด๋ž˜์Šค๋ฅผ ์™œ ๋งŒ๋“œ๋Š”๋ฐ?

ํด๋ž˜์Šค๋Š” ์ผ์ข…์˜ ๋ถ€ํ’ˆ์ด ์•„๋‹๊นŒ? ์ด๋ฅผํ…Œ๋ฉด ๊ฑฐ๋Œ€ํ•œ ์šฐ์ฃผ์„ ์„ ๋งŒ๋“ ๋‹ค๊ณ  ํ•˜์ž.

์ˆ˜๋งŒ๊ฐ€์ง€์˜ ๋ถ€ํ’ˆ์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๊ทธ ๋งŽ์€ ๋ถ€ํ’ˆ๋“ค ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.

์ด๋ฏธ ๋ˆ„๊ตฐ๊ฐ€ ๋งŒ๋“ค์–ด๋†“์€ ๋ถ€ํ’ˆ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€์„œ ์“ฐ๋Š” ๊ฒƒ์ด (ํ•ฉ๋ฆฌ์ ์ด๋ž„ ๊ฒƒ๋„ ์—†์ด)๋‹น์—ฐํ•œ ์„ ํƒ์ด๋‹ค. ๋ฌผ๋ก  ์—†๋Š” ๋ถ€ํ’ˆ์€ ์ง์ ‘ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…์ฒ˜๋Ÿผ.

์•„๋ฌดํŠผ.

ํด๋ž˜์Šค๋กœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šคํ™”๋ผ๊ณ  ํ•œ๋‹ค.

๋งŒ๋“ค์–ด์ง„ ํด๋ž˜์Šค๋ฅผ ์šฐ๋ฆฌ๋Š” ๊ฐ์ฒด(=์ธ์Šคํ„ด์Šค)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๊ฐ์ฒด์˜ ๊ตฌ์„ฑ์š”์†Œ

์†์„ฑproperty๊ณผ ๊ธฐ๋Šฅfunction์ด ์žˆ๋‹ค.

property - member variable

function - method

์ฐธ ์‰ฝ๊ณ  ์ง„๋ถ€ํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ์˜ˆ์ œ

package com.javaex.ch6;

public class TvProps {
    //๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ
    private boolean power;
    private int channel;

    public TvProps() {
        this.channel = 1;
        this.power = false;
    }

    void power() {
        this.power = !power;
    }

    void channelUp() {
        this.channel = ++channel;
    }

    void channelDown() {
        this.channel = --channel;
    }

    public int getChannel() {
        return channel;
    }

}

package com.javaex.ch6;

public class Tv {
    public static void main(String[] args) {
        TvProps tv = new TvProps();
        TvProps tv2 = new TvProps();

        tv.channelUp(); //2
        tv.channelUp(); //3
        tv.channelUp(); //4

        tv2.channelUp(); //2

        System.out.println("tv.channel : " + tv.getChannel());

        System.out.println("tv2.channel : " + tv2.getChannel());

        tv.channelDown();

        System.out.println("tv.channel : " + tv.getChannel());

        /* ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฅด๋‹ค. */
        System.out.println("==========before========");
        System.out.println("tv : " + tv);
        System.out.println("tv2: " + tv2);

        /*tv2์— tv๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค.*/
        tv2 = tv;

        /* ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ€ ๊ฐ™๋‹ค. */
        System.out.println("==========After========");
        System.out.println("tv : " + tv);
        System.out.println("tv2: " + tv2);
    }
}

์ฐธ๊ณ :์ž๋ฐ”์˜ ์ •์„

ํด๋ž˜์Šค

ํด๋ž˜์Šค๋Š” ๋ฐ์ดํ„ฐ์™€ ํ•จ์ˆ˜(java์—์„œ๋Š” method)์˜ ๊ฒฐํ•ฉ์ด๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ €์žฅํ˜•ํƒœ์˜ ๋ฐœ์ „๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋ณ€์ˆ˜

    ํƒœ์ดˆ์— ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋งŒ์„ ์ €์žฅํ•ด๋‘˜ ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด ์žˆ์—ˆ๋‹ค.

  2. ๋ฐฐ์—ด

    1์— ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š” ํƒ์š•์Šค๋Ÿฐ ์ธ๊ฐ„์ด ๊ฐ™์€ ์ข…๋ฅ˜์˜ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ

    ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์ฒ˜๋Ÿผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์ €์žฅํ˜•ํƒœ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

  3. ๊ตฌ์กฐ์ฒดstructure

    ์„œ๋กœ ๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ข…๋ฅ˜์— ๊ด€๊ณ„์—†์ด ์ง‘ํ•ฉ์ฒ˜๋Ÿผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด๋‹ค.

  4. ๊ทธ๋ฆฌ๊ณ  ํด๋ž˜์Šค๊ฐ€ ์žˆ์—ˆ๋‹ค

    ๊ตฌ์กฐ์ฒด์— ํ•จ์ˆ˜๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์„ ๋”ํ•œ ๊ฒƒ์ด ํด๋ž˜์Šค๋‹ค.

์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…(user - defined type) ํด๋ž˜์Šค

์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด ํ•„์š”ํ•œ ๋ถ€ํ’ˆ์ด ๋งˆ๋•…ํ•˜์ง€ ์•Š๋‹ค๋ฉด, ์ง์ ‘ ๋งŒ๋“ค์–ด ์“ฐ๋ฉด ๋œ๋‹ค.

์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…์„ ์กฐํ•ฉ(๋˜๋Š” ์ด์šฉ)ํ•ด์„œ ๋˜๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์ •์˜ํƒ€์ž… ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด.

  1. ์•„์ด์–ธ๋งจ, ์บกํ‹ด ์•„๋ฉ”๋ฆฌ์นด, ๋ธ”๋ž™ ํŽœ์„œ, ํ—ํฌ, ํ† ๋ฅด ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค.
  2. 1์—์„œ ์ •์˜ํ•œ ๊ฐ๊ฐ์˜ ์•„์ด์–ธ๋งจ, ์บกํ‹ด, ๋ธ”๋ž™ํŽœ์„œ, ํ—ํฌ, ํ† ๋ฅด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ์–ด๋ฒค์ ธ์Šค๋ผ๋Š” ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ

๋ณ€์ˆ˜๋Š” ์„ธ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

  1. ํด๋ž˜์Šค ๋ณ€์ˆ˜Class Variable
  2. Instance Variable(=๋ฉค๋ฒ„๋ณ€์ˆ˜)
  3. ์ง€์—ญ๋ณ€์ˆ˜Local Variable

์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋‹ค.

์ง€์—ญ ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ๋ธ”๋Ÿญ ๋ฐ–์„ ๋ฒ—์–ด๋‚  ์ˆ˜ ์—†๋‹ค.

์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์ค‘์—์„œ static์ด ๋ถ™์€ ๋ณ€์ˆ˜๊ฐ€ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋‹ค.

์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜? ํด๋ž˜์Šค ๋ณ€์ˆ˜? ๋ญ๊ฐ€ ๋‹ค๋ฅธ๋ฐ?

  • instance variable

ํด๋ž˜์Šค ์˜์—ญ์— ์„ ์–ธํ•œ๋‹ค. ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ„๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ’์ด ์ดˆ๊ธฐํ™”๋œ๋‹ค.

์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ์„œ๋Š” iv๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์—†๋‹ค.

  • class variable

์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์•ž์— 'static'์ด ๋ถ™์—ˆ๋‹ค๋ฉด ํด๋ž˜์Šค ๋ณ€์ˆ˜๋‹ค.

cv์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉ๋  ๋•Œ ์ƒ์„ฑ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋˜๊ณ  public์„ ๋ถ™์ด๋ฉด ์ „์—ญ ๋ณ€์ˆ˜global variable์˜ ์„ฑ๊ฒฉ์„ ๊ฐ€์ง„๋‹ค.

iv์ฒ˜๋Ÿผ ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๋งˆ๋‹ค ์ €์žฅ๊ณต๊ฐ„์ด ๋”ฐ๋กœ ์žˆ์ง€ ์•Š๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ„ cv๋Š” ํ•˜๋‚˜์˜ ์ €์žฅ๊ณต๊ฐ„์„ ๊ฐ€์ง„๋‹ค. iv์ฒ˜๋Ÿผ ์ฐธ์กฐ๋ณ€์ˆ˜.๋ณ€์ˆ˜๋ช…์œผ๋กœ ์“ฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ํด๋ž˜์Šค์ด๋ฆ„.๋ณ€์ˆ˜๋ช…์œผ๋กœ ์“ด๋‹ค.

๋ฌผ๋ก  iv์™€ ๊ฐ™์ด ์ฐธ์กฐ๋ณ€์ˆ˜.๋ณ€์ˆ˜๋ช…์œผ๋กœ ์“ธ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด๋„ static๋ณ€์ˆ˜์˜ ๊ฐ’์€ ๊ณต์œ ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ static๋ณ€์ˆ˜์˜ ๊ฐ’์€ ํ•ญ์ƒ ๊ณตํ†ต๋œ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค.

๋ณดํ†ต final static ~ํ•˜๋ฉด์„œ ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ์–ด๋–ค ๊ฐ์ฒด์—์„œ๋„ ๊ฐ™์•„์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

class Ironman {
    static String tonyStark = "robertDowneyJr";
}

public class Avengers {
    public static void main(String[] args) {
        System.out.println("================BEFORE====================");
        System.out.println("Ironman.tonyStark : " + Ironman.tonyStark);

        Ironman.tonyStark = "James Gosling";

        System.out.println("================AFTER====================");
        System.out.println("Ironman.tonyStark : " + Ironman.tonyStark);

                System.out.println("------------------------------------------");

        System.out.println("iron1.tonyStark : " + iron1.tonyStark);
        System.out.println("iron2.tonyStark : " + iron2.tonyStark);

        iron1.tonyStark = "SAME";

        System.out.println("--------------------------------------------");
        System.out.println("iron1.tonyStark : " + iron1.tonyStark);
        System.out.println("iron2.tonyStark : " + iron2.tonyStark);
    }

}

/*
๊ฒฐ๊ณผ
================BEFORE====================
Ironman.tonyStark : robertDowneyJr
================AFTER====================
Ironman.tonyStark : James Gosling

------------------------------------------
iron1.tonyStark : James Gosling
iron2.tonyStark : James Gosling
--------------------------------------------
iron1.tonyStark : STATIC is shared.
iron2.tonyStark : STATIC is shared.

*/

Method

๋ฉ”์„œ๋“œ๋ž€, ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ฌ๋Ÿฌ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์€ ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ ํ˜•ํƒœ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. Input์ด๋‚˜ Output์ด ์žˆ์„ ์ˆ˜๋„, ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค.

์œ„์˜ ๊ทธ๋ฆผ์— ๋น—๋Œ€์–ด ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด๋ณธ๋‹ค๋ฉด ์ด๋ ‡๋‹ค.

class ColorBall {

    String ballColor;

    /* ์–ด๋–ค ์ƒ‰์˜ ๊ณต์ด๋“  ๋…ธ๋ž€์ƒ‰ ๊ณต์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฉ”์„œ๋“œ */
    String ballColorChange(String ball) { //์„ ์–ธ๋ถ€ return type - method name(parameter type)
        ball = "YellowBall";
        return ball;
    }
}

public class MethodEx {
    public static void main(String[] args) {

        ColorBall ball = new ColorBall();

        String ball1 = ball.ballColor = "red ball";
        String ball2 = ball.ballColor = "blue ball";

        System.out.println("----------before------------");
        System.out.println("ball1 : " + ball1);
        System.out.println("ball2 : " + ball2);

        System.out.println("-----------after------------");
        System.out.println("ball1 : " + ball.ballColorChange(ball1));
        System.out.println("ball2 : " + ball.ballColorChange(ball2));

    }
}

/* ๊ฒฐ๊ณผ
----------before------------
ball1 : red ball
ball2 : blue ball
-----------after------------
ball1 : YellowBall
ball2 : YellowBall
*/

ColorBallํƒ€์ž…์˜ ๋ณ€์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” ballColorChange๋ฉ”์„œ๋“œ๋‹ค.

์ด ๋ฉ”์„œ๋“œ๋Š” ํŒŒ๋ž€์ƒ‰ ๋ณผ์„ ๋„ฃ๋“ , ์ดˆ๋ก์ƒ‰ ๋ณผ์„ ๋„ฃ๋“  ๋…ธ๋ž€์ƒ‰ ๋ณผ๋กœ ๋ฐ”๊พธ์–ด ์ถœ๋ ฅํ•œ๋‹ค.

๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ์„ธ ๊ฐ€์ง€

  1. ๋†’์€ ์žฌ์‚ฌ์šฉ์„ฑ

    ์œ„์—์„œ ๋“  ์˜ˆ์‹œ๋Š” ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ์ด๊ฒƒ์ด ์•„์ฃผ ๋ณต์žกํ•œ ์ž‘์—…์ด๋ฉด์„œ, ๋ฐ˜๋ณตํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์ด๋ผ๋ฉด,

    ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋ณผ์„ ๋งŒ๋“ค๊ณ  ํŽ˜์ธํŠธ๋กœ ๋„์ƒ‰ํ•˜๊ณ , ๋ง๋ฆฌ๊ณ , ๋‹ค์‹œ ๋‹ค๋ฅธ ์ƒ‰์œผ๋กœ ๋ฎ์–ด์“ฐ๋Š” ๋ณต์žกํ•˜๊ณ  ๊ท€์ฐฎ์€ ์ž‘์—…์ด๋ผ๋ฉด, ๋ฉ”์„œ๋“œ ํ•˜๋‚˜๋งŒ ์ •์˜ํ•ด๋†“์œผ๋ฉด ๊ท€์ฐฎ์€ ์ผ์„ ๋ฐ˜๋ณตํ•  ํ•„์š” ์—†์ด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  2. 1์—์„œ ์ด์–ด์ง€๋Š” ์žฅ์ ์ธ๋ฐ, ์ค‘๋ณต์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์กฐํ™”

    ํฐ ๊ทœ๋ชจ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ๋•Œ, ์ž‘์—…๋‹จ์œ„๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด

    ์ „์ฒด ํ๋ฆ„์„ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹จ์ˆœํ•˜๊ฒŒ ๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

๋‹คํ˜•์„ฑPolymorphism  (0) 2020.09.06
์ƒ์†Inheritance  (0) 2020.09.06
์ œ์–ด์žModifier  (0) 2020.09.06
๊ฐ์ฒด์ง€ํ–ฅ2  (0) 2020.09.06
Java๋ž€?  (0) 2020.09.06