๐ญ Chapter 6: ๊ฐ์ฒด์ ์๋ฃ ๊ตฌ์กฐ
๋ณ์๋ฅผ ๋น๊ณต๊ฐ(private)๋ก ์ ์ํ๋ ์ด์ ๊ฐ ์๋ค. ๋จ๋ค์ด ๋ณ์์ ์์กดํ์ง ์๊ฒ ๋ง๋ค๊ณ ์ถ์ด์๋ค. ์ถฉ๋์ด๋ ๋ณ๋์ด๋ , ๋ณ์ ํ์ ์ด๋ ๊ตฌํ์ ๋ง๋๋ก ๋ฐ๊พธ๊ณ ์ถ์ด์๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด์งธ์ ์๋ง์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์กฐํ(get) ํจ์์ ์ค์ (set) ํจ์๋ฅผ ๋น์ฐํ๊ฒ ๊ณต๊ฐ(public)ํด ๋น๊ณต๊ฐ ๋ณ์๋ฅผ ์ธ๋ถ์ ๋ ธ์ถํ ๊น?
๐ ์๋ฃ ์ถ์ํโ
๋ค์ ๋ ์์ ์ ์ฐจ์ด๋ฅผ ์ดํด๋ณด์. ๋ ํด๋์ค ๋ชจ๋ 2์ฐจ์ ์ ์ ํํํ๋ค. ๊ทธ๋ฐ๋ฐ ํ ํด๋์ค๋ ๊ตฌํ์ ์ธ๋ถ๋ก ๋ ธ์ถํ๊ณ ๋ค๋ฅธ ํด๋์ค๋ ๊ตฌํ์ ์์ ํ ์จ๊ธด๋ค.
public class Point {
public double x;
public double y;
}
public interface Point {
double getX();
double getY();
void setCartesian(double x, double y);
double getR();
double getTheta();
void setPolar(double r, double theta);
}
์ ๋ง ๋ฉ์ง๊ฒ๋, ๋ ๋ฒ์งธ ์์ ๋ ์ ์ด ์ง๊ต์ขํ๊ณ๋ฅผ ์ฌ์ฉํ๋์ง ๊ทน์ขํ๊ณ๋ฅผ ์ฌ์ฉํ๋์ง ์ ๊ธธ์ด ์๋ค. ๋ ๋ค ์๋์ง๋ ๋ชจ๋ฅธ๋ค! ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ธํฐํ์ด์ค๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ช ๋ฐฑํ๊ฒ ํํํ๋ค.
๋ณ์ ์ฌ์ด์ ํจ์๋ผ๋ ๊ณ์ธต์ ๋ฃ๋๋ค๊ณ ๊ตฌํ์ด ์ ์ ๋ก ๊ฐ์ถฐ์ง์ง๋ ์๋๋ค. ๊ตฌํ์ ๊ฐ์ถ๋ ค๋ฉด ์ถ์ํ๊ฐ ํ์ํ๋ค! ๊ทธ์ ์กฐํ ํจ์์ ์ค์ ํจ์๋ก ๋ณ์๋ฅผ ๋ค๋ฃฌ๋ค๊ณ ํด๋์ค๊ฐ ๋์ง๋ ์๋๋ค. ๊ทธ๋ณด๋ค๋ ์ถ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด ์ฌ์ฉ์๊ฐ ๊ตฌํ์ ๋ชจ๋ฅธ ์ฑ ์๋ฃ์ ํต์ฌ์ ์กฐ์ํ ์ ์์ด์ผ ์ง์ ํ ์๋ฏธ์ ํด๋์ค๋ค.
๋ค์ ๋ ์์ ๋ฅผ ์ดํด๋ณด์. ์ฒซ ๋ฒ์งธ ์์ ๋ ์๋์ฐจ ์ฐ๋ฃ ์ํ๋ฅผ ๊ตฌ์ฒด์ ์ธ ์ซ์ ๊ฐ์ผ๋ก ์๋ ค์ค๋ค. ๋ ๋ฒ์งธ ์์ ๋ ์๋์ฐจ ์ฐ๋ฃ ์ํ๋ฅผ ๋ฐฑ๋ถ์จ์ด๋ผ๋ ์ถ์์ ์ธ ๊ฐ๋ ์ผ๋ก ์๋ ค์ค๋ค. ์ฒซ ๋ฒ์งธ ์์ ๋ ๋ ํจ์๊ฐ ๋ณ์๊ฐ์ ์ฝ์ด ๋ฐํํ ๋ฟ์ด๋ผ๋ ์ฌ์ค์ด ๊ฑฐ์ ํ์คํ๋ค. ๋ ๋ฒ์งธ ์์ ๋ ์ ๋ณด๊ฐ ์ด๋์ ์ค๋์ง ์ ํ ๋๋ฌ๋์ง ์๋๋ค.
// ๊ตฌ์ฒด์ ์ธ Vehicle ํด๋์ค
public interface Vehicle {
double getFuelTankCapacityInGallons();
double getGallonsOfGasoline();
}
// ์ถ์์ ์ธ Vehicle ํด๋์ค
public interface Vehicle {
double getPercentFuelRemaining();
}
์๋ฃ๋ฅผ ์ธ์ธํ๊ฒ ๊ณต๊ฐํ๊ธฐ๋ณด๋ค๋ ์ถ์์ ์ธ ๊ฐ๋ ์ผ๋ก ํํํ๋ ํธ์ด ์ข๋ค. ์ธํฐํ์ด์ค๋ ์กฐํ/์ค์ ํจ์๋ง์ผ๋ก๋ ์ถ์ํ๊ฐ ์ด๋ค์ง์ง ์๋๋ค. ๊ฐ๋ฐ์๋ ๊ฐ์ฒด๊ฐ ํฌํจํ๋ ์๋ฃ๋ฅผ ํํํ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ฌ๊ฐํ๊ฒ ๊ณ ๋ฏผํด์ผ ํ๋ค. ์๋ฌด ์๊ฐ ์์ด ์กฐํ/์ค์ ํจ์๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ๋์๋ค.