[Java] ๐Ÿ’Š ์บก์Šํ™”(encapsulation)

JTIยท2022๋…„ 10์›” 25์ผ
0

โ˜•๏ธย  Java

๋ชฉ๋ก ๋ณด๊ธฐ
11/59
post-thumbnail

์ด์ œ ํด๋ž˜์Šค๋‚˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ํ˜„์‹ค์„ธ๊ณ„๋ฅผ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ž์œ ๋กญ๊ฒŒ ๊ฐœ๋ฐœ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์‹ค์ˆ˜๋กœ ์†์„ฑ์„ ๋ฎ์–ด ์“ฐ๊ฑฐ๋‚˜, ์ž˜๋ชป๋œ ์กฐ์ž‘ํ•˜๋Š” ๋“ฑ์˜ ํœด๋จผ์—๋Ÿฌ๋ฅผ ์™„์ „ํžˆ ์—†์•จ ์ˆ˜๋Š” ์—†๋‹ค.

๊ทธ๋ž˜์„œ Java์—๋Š” ์‹ค์ˆ˜๋ฅผ ๋ฏธ์—ฐ์— ๋ฐฉ์ง€ํ•˜๋Š” "์บก์Šํ™”"๋ผ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

โœ”๏ธ static: ๊ณต์œ ์ž์›, final: ๋ณ€๊ฒฝ ๊ธˆ์ง€

static final int MAX_HP = 50

๐Ÿ’ก ๋ฉค๋ฒ„์— ๋Œ€ํ•œ ์—‘์„ธ์Šค ์ œ์–ด


์ ‘๊ทผ ์ œํ•œ์ž(access modifier)

  • private(์ œํ•œ์ด ์—„๊ฒฉ) - ์ž๊ธฐ ์ž์‹ ์˜ ํด๋ž˜์Šค
  • default(์ƒ๋žต) - ์ž์‹ ๊ณผ ๊ฐ™์€ ํŒจํ‚ค์ง€์— ์†Œ์†๋œ ํด๋ž˜์Šค
  • protected - ์ž์‹ ๊ณผ ๊ฐ™์€ ํŒจํ‚ค์ง€์— ์†Œ์†๋˜๋˜์ง€, ์ž์‹ ์„ ์ƒ์†๋ฐ›์€ ์ž์‹ ํด๋ž˜์Šค
  • public(์ œํ•œ์ด ๋Š์Šจ) - ๋ชจ๋“  ํด๋ž˜์Šค

๐Ÿ’ก ๋ฉค๋ฒ„์— ๊ด€ํ•œ ์—‘์„ธ์Šค ์ง€์ •์˜ ์ •์„


  • ๋ฉค๋ฒ„๋ณ€์ˆ˜๋Š” ์ „๋ถ€ private
  • ๋ฉ”์„œ๋“œ๋Š” ์ „๋ถ€ public
  • ๋ณ„๋‹ค๋ฅธ ์ด์œ ๊ฐ€ ์—†์œผ๋ฉด ํด๋ž˜์Šค๋Š” public

๐Ÿ’กgetter / setter


โœ”๏ธ setter: ๊ฐ’์„ ์ˆ˜์ •
โœ”๏ธ getter: ๊ฐ’์„ ๊ฐ€์ ธ์˜ด

  • ๋ฉ”์„œ๋“œ๋ฅผ ๊ฒฝ์œ ํ•œ ํ•„๋“œ ์กฐ์ž‘
  • ๋ชจ๋“  ํ•„๋“œ๋ฅผ private๋กœ ์ง€์ •ํ•ด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ ‘๊ทผ์ด ์•ˆ ๋˜๋„๋ก ๋ง‰๋Š”๋‹ค.
  • ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•˜๋„๋ก ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ.
  • getter๋ฅผ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋ฉด private๋ฅผ ์„ค์ •ํ•œ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋Š” ์ฝ๊ธฐ์ „์šฉ์ด ๋œ๋‹ค.

๐Ÿ“ ์˜ˆ์‹œ)

class Drink {
	private int drinkNum;
	private String name;
	private int price;
	
	public Drink(int drinkNum, String name, int price) {
		setDrinkNum(drinkNum);
		setName(name);
		setPrice(price);
	}
	
	public int getDrinkNum() { // getter
		return drinkNum;
	}
	
	public void setDrinkNum(int drinkNum) { // setter
		this.drinkNum = drinkNum;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public int getPrice() {
		return price;
	}
	
	public void setPrice(int price) {
		this.price = price;
	}
}

โ—๏ธ getter / setter์˜ ๋ฉ”๋ฆฌํŠธ


  1. Read Only, Write Onlyํ•„๋“œ์˜ ์‹คํ˜„
  2. ํ•„๋“œ์˜ ์ด๋ฆ„ ๋“ฑ, ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€ ์„ค๊ณ„๋ฅผ ์ž์œ ๋กญ๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  3. ํ•„๋“œ๋กœ์˜ ์—‘์„ธ์Šค๋ฅผ ๊ฒ€์‚ฌ ๊ฐ€๋Šฅ
    • ํ•„๋“œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ • ๊ฐ€๋Šฅ

โœ๏ธ setter ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ๊ฐ’์˜ ํƒ€๋‹น์„ฑ์„ ๊ฒ€์‚ฌ

๐Ÿ“ ex) ์ด๋ฆ„์— ๋ช‡๊ฐ€์ง€ ์ œ์•ˆ์„ ๋‘ 

String name;

public void setName(String name) {
	if(name == null) {
    	throw new IllegalArgumentException("์ด๋ฆ„์€ null์ด ์•„๋‹ˆ์–ด์•ผ ํ•จ");
     } 
    if(name.length() <= 1) {
    	throw new IllegalArgumentException("์ด๋ฆ„์ด ๋„ˆ๋ฌด ์งง์Œ");
    }
    if(name.length*( >= 8) {
    	throw new IllegalArgumentException("์ด๋ฆ„์ด ๋„ˆ๋ฌด ๊น€");
    }
    this.name = name;
}

๐Ÿ’ก ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์—‘์„ธ์Šค ์ œ์–ด


ํด๋ž˜์Šค์˜ ์•ก์„ธ์Šค ์ œ์–ด์˜ ์ง€์ •๋ฐฉ๋ฒ•๊ณผ ๋ฒ”์œ„
(์›ฌ๋งŒํ•˜๋ฉด ํด๋ž˜์Šค ์ ‘๊ทผ์ œํ•œ์€ public!!)

  • package private
    : ์ž์‹ ๊ณผ ๊ฐ™์€ ํŒจํ‚ค์ง€์— ์†Œ์†๋œ ํด๋ž˜์Šค
    : ์ œํ•œ์ด ์—„๊ฒฉ
  • public
    : ๋ชจ๋“  ํด๋ž˜์Šค
    : ์ œํ•œ์ด ๋Š์Šจ

โ—๏ธ public ํด๋ž˜์Šค์˜ ํŠน์ง•
1. ํด๋ž˜์Šค์˜ ์ด๋ฆ„์€ ์†Œ์Šค ํŒŒ์ผ๋ช…๊ณผ ๋‹ฌ๋ผ๋„ ๋œ๋‹ค.
2. 1๊ฐœ์˜ ์†Œ์Šค ํŒŒ์ผ์— ์—ฌ๋Ÿฌ๊ฐœ ์„ ์–ธํ•ด๋„ ๋œ๋‹ค.

๐Ÿ“Œ ๋งˆ์ง€๋ง‰ ์ •๋ฆฌ


โœ”๏ธ ์บก์Šํ™”์˜ ๊ฐœ์š”

  • ์บก์Šํ™”๋ฅผ ํ•˜์—ฌ ๋ฉค๋ฒ„๋‚˜ ํด๋ž˜์Šค๋กœ์˜ ์ ‘๊ทผ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Œ
  • ํŠนํžˆ, ํ•„๋“œ์— "ํ˜„์‹ค์„ธ๊ณ„์—์„œ ์žˆ์„ ์ˆ˜ ์—†๋Š” ๊ฐ’"์ด ๋“ค์–ด๊ฐ€์ง€ ์•Š๋„๋ก ์ œ์–ด

โœ”๏ธ ๋ฉค๋ฒ„์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ง€์ •

  • private ์ง€์ •๋œ ๋ฉค๋ฒ„๋Š”, ๋™์ผ ํด๋ž˜์Šค๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • package private(์•„๋ฌด๊ฒƒ๋„ ์ง€์ •์•ˆ๋œ) ์ง€์ •๋œ ๋ฉค๋ฒ„๋Š”, ๋™์ผ ํŒจํ‚ค์ง€๋‚ด์˜ ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • public ์ง€์ •๋œ ๋ฉค๋ฒ„๋Š”, ๋ชจ๋“  ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

โœ”๏ธ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ง€์ •

  • package private(์—ฐ์‚ฐ์ž ์—†์Œ) ์œผ๋กœ ์„ ์–ธ ๋œ ํด๋ž˜์Šค๋Š”, ๋™์ผ ํŒจํ‚ค์ง€๋‚ด์˜ ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ํ•„๋“œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์„œ๋“œ๋กœ์„œ getter๋‚˜ setter๋ฅผ ์ค€๋น„
  • setter ๋‚ด๋ถ€์—์„œ๋Š” ์ธ์ˆ˜์˜ ํƒ€๋‹น์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰
profile
Fill in my own colorful colors๐ŸŽจ

0๊ฐœ์˜ ๋Œ“๊ธ€