๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Java] ์บก์Šํ™” ๋ณธ๋ฌธ

โญ ์บก์Šํ™”

 

์ •์˜

  • ๊ด€๋ จ์ด ์žˆ๋Š” ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๊ณ  ์™ธ๋ถ€์—์„œ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๊ฐ์ฒด์˜ ํ•„๋“œ์— ์ง์ ‘์ ์ธ ์ ‘๊ทผ์„ ๋ง‰๊ณ  ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€์˜ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•จ private ํ•„๋“œ
  • ๊ฐ์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ public ๋ฉ”์†Œ๋“œ
  •  

 ์žฅ์ 

  • ๊ฐ์ฒด ๋ชจ๋“ˆํ™” ๊ฐ€๋Šฅ
  • ์ฝ”๋“œ ์ด์‹์„ฑ ์ข‹์•„์ง
public class EncapsulationExample {
    private String name;
    private int age;
    private String registrationNumber;

    public EncapsulationExample() {}

    public EncapsulationExample(String name, int age, String registrationNumber) {
        this.name = name;
        this.age = age;
        this.registrationNumber = registrationNumber;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if (name == null || name.equals("")) return;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age < 0 || age > 100) return;
        this.age = age;
    }

    public String getRegistrationNumber() {
        return registrationNumber;
    }

    public void setRegistrationNumber(String registrationNumber) {
        if (registrationNumber == null || registrationNumber.equals("")) return;
        final String REGSTRATION_REGEX = "^\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|[3][01])\\-[1-4][0-9]{6}$";
        if (!registrationNumber.matches(REGSTRATION_REGEX)) return;

        this.registrationNumber = registrationNumber;
    }

    @Override
    public String toString() {
        return "NoEncapsulationExample{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", registrationNumber='" + registrationNumber + '\'' +
                '}';
    }
}
public class Main {
    public static void main(String[] args) {
        NoEncapsulationExample noEncapsulationExample = new NoEncapsulationExample("bab", 30, "910308-1234567");
        System.out.println(noEncapsulationExample);

        noEncapsulationExample.age = -10000; // ์™ธ๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ด์ƒํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Œ
        noEncapsulationExample.name = null; // ์™ธ๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ด์ƒํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Œ
        noEncapsulationExample.registrationNumber = "121234-9234567";
        System.out.println(noEncapsulationExample);
        System.out.println();

        ///////////////////////////////////////////////////
        EncapsulationExample encapsulationExample = new EncapsulationExample("bab", 30, "910308-1234567");
        System.out.println(encapsulationExample);

        encapsulationExample.setAge(-10000);
        encapsulationExample.setName(null);
        encapsulationExample.setRegistrationNumber("121234-9234567");
        System.out.println(encapsulationExample);

    }
}

 

๊ตฌํ˜„ ๋ฐฉ๋ฒ•

  • ์ ‘๊ทผ์ œ์–ด์ž

์ ‘๊ทผ ์ œ์–ด์ž ๊ฐ™์€ ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋ฉค๋ฒ„ ์ž์‹ ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๊ทธ ์™ธ

public โญ•๏ธ โญ•๏ธ โญ•๏ธ โญ•๏ธ
protected โญ•๏ธ โญ•๏ธ โญ•๏ธ โŒ
default โญ•๏ธ โญ•๏ธ โŒ โŒ
private โญ•๏ธ โŒ โŒ โŒ

 

  • private - ํด๋ž˜์Šค ๋‚ด๋ถ€ ์„ธ๋ถ€ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • public - private ํ•„๋“œ๊ณผ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• 
  • default - ์ ‘๊ทผ ์ œ์–ด ๊ธฐ๋ณธ๊ฐ’
  • protectedpublic > protected > default > private

 

setter/getter

 

  • ๊ฐ์ฒด ์ ‘๊ทผํ•˜๋Š”๋ฐ ํ•„๋“œ๋Š” ์ˆจ๊ธฐ๊ณ  ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ
  • ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ๋Š” ์ •๋ณด์†์ƒ์ด๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ง‰๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ
    • if ๋˜๋Š” regex์„ ํ†ตํ•ด
  • ๋ฉ”์†Œ๋“œ๋ฅผ ํ•œ๋ฒˆ ๊ฑฐ์ณ์„œ ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ๋งŒ ํ•„๋“œ์— ๋“ฑ๋ก๋  ์ˆ˜ ์žˆ๋„๋ก ํ•จ

 


 

โญ์ •์  ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ

 

  • ์˜๋ฏธ
    • static
    • ํด๋ž˜์Šค์— ๊ณ ์ •๋œ ๋ฉค๋ฒ„ → ํด๋ž˜์Šค ๋ฉค๋ฒ„
    • ํด๋ž˜์Šค ๋กœ๋”ฉ์‹œ ๊ฐ™์ด ๋กœ๋”ฉ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ๊ณตํ†ต์˜์—ญ์— ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์ƒ์„ฑ ํ•„์š” ์—†์Œ
    • ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋กœ๋”ฉํ•ด์„œ ๋ฉ”์†Œ๋“œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ ์žฌํ•จ
    • ๊ฐ์ฒด๋งˆ๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๋ฉด ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋กœ ์„ ์–ธ
    • ๊ฐ์ฒด๋งˆ๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ์„ ํ•„์š”์—†๋Š” ๊ณต์šฉ ๋ฐ์ดํ„ฐ๋ผ๋ฉด ์ •์  ํ•„๋“œ๋กœ ์„ ์–ธ
  • ๋ฉ”๋ชจ๋ฆฌ

 

  • ์„ ์–ธ ๋ฐฉ๋ฒ•
public class ํด๋ž˜์Šค์ด๋ฆ„ {
    // ์ •์  ํ•„๋“œ
    ์ ‘๊ทผ์ œ์–ด์ž static ํƒ€์ž…ํ•„๋“œ = ์ดˆ๊ธฐ๊ฐ’;

    // ์ •์  ๋ฉ”์†Œ๋“œ
    ์ ‘๊ทผ์ œ์–ด์ž static ๋ฐ˜ํ™˜ํ˜• ๋ฉ”์†Œ๋“œ (๋งค๊ฐœ๋ณ€์ˆ˜, ...) { ... }
}

 

  • ์‚ฌ์šฉ ์˜ˆ์‹œ 1๏ธโƒฃ
    • ํ…Œ์Šฌ๋ผ์—์„œ ๋งŒ๋“  ์ž๋™์ฐจ ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •
    • ํ•ด๋‹น ์ž๋™์ฐจ ํด๋ž˜์Šค์—์„œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” ๋ชจ๋‘ ๋ธŒ๋žœ๋“œ์ด๋ฆ„์„ ์ €์žฅํ•˜๋Š” ํ•„๋“œ๊ฐ€ ํ…Œ์Šฌ๋ผ๋ฅผ ๊ฐ€์ง static
    • ๋ธŒ๋žœ๋“œ์ด๋ฆ„์€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†์Œ final
import java.util.Arrays;
import java.util.Objects;

    public class Car { // ํ…Œ์Šฌ๋ผ ์ž๋™์ฐจ๋งŒ ๋งŒ๋“œ๋Š” ๊ณต์žฅ
        private String ID;
        private String modelName;
        private String color;
        private String[] options;

        private static final String BRAND = "TESLA"; // ์ •์  ํ•„๋“œ

        public Car() {}

        public Car(String ID, String modelName, String color, String[] options) {
            this.ID = ID;
            this.modelName = modelName;
            this.color = color;
            this.options = options;
        }

        public String getID() {
            return ID;
        }

        public void setID(String ID) {
            this.ID = ID;
        }

        public String getModelName() {
            return modelName;
        }

        public void setModelName(String modelName) {
            this.modelName = modelName;
        }

        public String getColor() {
            return color;
        }

        public void setColor(String color) {
            this.color = color;
        }

        public String[] getOptions() {
            return options;
        }

        public void setOptions(String[] options) {
            this.options = options;
        }


        public static String getBrandName() {  // ์ •์  ๋ฉ”์†Œ๋“œ
            return Car.BRAND;
        }

        @Override
        public String toString() {
            return "Car{" +
                    "ID='" + ID + '\'' +
                    ", modelName='" + modelName + '\'' +
                    ", color='" + color + '\'' +
                    ", options=" + Arrays.toString(options) +
                    '}';
        }
    }

 

์ •์  ๋ธ”๋ก

 

  • ๋ชฉ์ 
    • ์ •์  ํ•„๋“œ์˜ ๋ณต์žกํ•œ ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•จ
  • ์‹คํ–‰์ˆœ์„œ
    • ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋กœ๋”ฉ๋  ๋•Œ ์„ ์–ธ๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰
  • ๊ตฌ์กฐ
// ์ •์  ํ•„๋“œ ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•ด ๊ณ„์‚ฐ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
// ์ •์  ๋ธ”๋ก (static block) ์‚ฌ์šฉ
    public class Television {
        private static final String BRAND;
        private static final String MODEL;
        private static final String INFO;
        private static int numOfTelevision = 0;

        static {
            BRAND = "SUMSUNG";
            MODEL = "QLED";
            INFO = BRAND + "-" + MODEL;
        }
    }
  • ํŠน์ง•
    • ๊ฐ์ฒด๊ฐ€ ์—†์ด๋„ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— this ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ