2023. 2. 27. 11:36γJAVA/Effective JAVA
[μ΄νν°λΈ μλ°] Item16. public ν΄λμ€μμλ public νλκ° μλ λ©μλ μ κ·Όμλ₯Ό μ¬μ©νλΌ.
public class Point
{
public double x;
public double y;
public static void main(String[] args)
{
Point point = new Point();
point.x = 10;
point.y = 20;
}
}
μμ μμμ²λΌ public ν΄λμ€μμ public νλλ₯Ό ν΅ν΄ μ¬μ©νλ€λ©΄ λ°μ΄ν° νλμ μ§μ μ κ·Όν μ μμ΄ μΊ‘μνμ μ΄μ μ μ 곡νμ§ λͺ»νλ€.
[μ΄νν°λΈ μλ°] Item15. ν΄λμ€μ λ©€λ²μ μ κ·Ό κΆνμ μ΅μννλΌ. (tistory.com)
-> μΊ‘μνμ μ΄μ μ μ¬κΈ°μ νμΈν μ μλ€.
λ°μ΄ν° νλμ μ§μ μ κ·Όνκ² λλ©΄ APIλ₯Ό μμ νμ§ μκ³ λ λ΄λΆ ννμ λ°κΏ μ μκ³ , λΆλ³μμ 보μ₯ν μ μμΌλ©°, μΈλΆμμ νλμ μ κ·Όν λ λΆμ μμ μ μνν μλ μλ€.
public class Point
{
private double x;
private double y;
public Point(double x, double y)
{
this.x = x;
this.y = y;
}
public double getX()
{
// λΆκ° μμ
κ°λ₯
return x;
}
public double getY()
{
return y;
}
public void setY(double y)
{
this.y = y;
}
public void setX(double x)
{
// λΆκ° μμ
κ°λ₯
this.x = x;
}
}
λ°λΌμ νλ μ κ·Όμ public νλκ° μλ λ©μλ μ κ·Όμλ₯Ό μ¬μ©ν΄μΌ νλ€. νλλ₯Ό λͺ¨λ privateλ‘ λ³κ²½νκ³ public μ κ·Όμ(getter) μΆκ°!!
ν¨ν€μ§ λ°κΉ₯μμ μ κ·Όν μ μλ ν΄λμ€λΌλ©΄ μ κ·Όμλ₯Ό μ 곡ν¨μΌλ‘μ¨ ν΄λμ€ λ΄λΆ νν λ°©μμ μΈμ λ λ°κΏ μ μλ μ μ°μ±μ μ»μ μ μλ€.
public ν΄λμ€κ° νλλ₯Ό 곡κ°νλλΌλ©΄ μ΄λ₯Ό μ¬μ©νλ ν΄λΌμ΄μΈνΈκ° μ겨μ λ΄λΆ νν λ°©μμ λ§μλλ‘ λ°κΏ μ μκ² λκΈ° λλ¬Έμ΄λ€.
β μ± μμλ package-private ν΄λμ€ νΉμ private μ€μ²© ν΄λμ€λΌλ©΄ λ°μ΄ν° νλλ₯Ό λ ΈμΆνλ€ ν΄λ νλ±μ λ¬Έμ κ° μλ€κ³ λ νλ€.
ν΄λΌμ΄μΈνΈ μ½λκ° μ΄ ν΄λμ€ λ΄λΆ ννμ λ¬Άμ΄κΈ°λ νκ² μ§λ§, ν΄λΌμ΄μΈνΈλ μ΄μ°¨νΌ μ΄ ν΄λμ€λ₯Ό ν¬ν¨νλ ν¨ν€μ§ μμμλ§ λμνκΈ° λλ¬Έμ΄λ€. νμ§λ§ κ°μλ₯Ό λ€μ λ κ°μ¬λμ package-private ν΄λμ€λΌκ³ νλλΌλ private λ‘ νλλ₯Ό μ κ·ΌκΆνμ μ£Όκ³ , λ©μλ μ κ·Όμλ₯Ό μ¬μ©νλ κ²μ΄ λ μ’μ κ²μ΄λΌκ³ νκ³ , λ΄ μκ°μλ λ©μλ μ κ·Όμλ₯Ό μ¬μ©νλ κ²μ΄ λ μ’κ² λ€κ³ μκ°νλ€. κ·Έλ¦¬κ³ κ·Έλ κ² μ¬μ©νκ³ μμκΈ°λ νκ³ .. !
π‘ μλ° νλ«νΌ λΌμ΄λΈλ¬λ¦¬μλ public ν΄λμ€μ νλλ₯Ό μ§μ λ ΈμΆνμ§ λ§λΌλ κ·μΉμ μ΄κΈ°λ μ¬λ‘κ° μλ€.
λνμ μΈ μλ‘λ java.awt.package ν¨ν€μ§μ Dimension ν΄λμ€κ° μλ€.
Dimension ν΄λμ€λ₯Ό 보면 width, heightλ₯Ό μ§μ λ ΈμΆνκ³ μκ³ , μ΄λ‘ μΈν μ¬κ°ν μ±λ₯ λ¬Έμ λ μ€λλ κΉμ§λ ν΄κ²°λμ§ λͺ»νλ€κ³ νλ€....
public static void main(String[] args)
{
Button button = new Button("Hello Button");
button.setBounds(0, 0, 20, 10);
Dimension size = button.getSize();
System.out.println("size.height = " + size.height);
System.out.println("size.height = " + size.height);
doSomething(size);
}
μ΄λ κ² size.height, size.widthμ μ§μ μ κ·Όν μ μλλ°.. μλ₯Ό λ€μ΄ doSomethng()μ΄λΌλ λ©μλλ₯Ό μννκ³ λ ν κ·Έ λ€μ widthμ heightμ ν¬κΈ°κ° μΈμ μ΄λμ λ³κ²½λμμμ§ μμΈ‘νκΈ° νλ€μ΄μ§λ©° μ½λκ° λΆμν΄μ§κ³ ,
private static void doSomething(Dimension size)
{
// κ°μ copy ν΄μ μ¬μ©ν΄μΌ νλ€. -> κ·Όλ° νλ²μΌλ‘ μ±λ₯ μ νκ° μΌμ΄λμ§λ μκ² μ§λ§..μ΄λ κ² copyνλ μμ²΄κ° λΆνΈνλ€!!
Dimension dimension = new Dimension();
dimension.width = size.width;
dimension.height = size.height;
}
λ°λΌμ μμ κ°μ΄ κ°μ copyν΄μ μ¬μ©ν΄μΌ νλλ° μ΄κ² λΆνμν μΈμ€ν΄μ€λ₯Ό λ§λλ μμ μ΄κΈ° λλ¬Έμ νλ² μ λ copyν΄μ μ¬μ©νλ건 μ±λ₯ λ¬Έμ λ‘ μ΄μ΄μ§μ§λ μκ² μ§λ§.. μλ°±λ§λ²? μ΄λ κ² νΈμΆνκ² λλ€λ©΄... μ±λ₯μμ μ¬κ°ν λ¬Έμ λ₯Ό μΌμΌν¬ μ μλ€.
κ·Όλ° μ±λ₯ λ¬Έμ λΏλ§ μλλΌ μ΄λ κ² μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ .. 볡μ¬ν΄μ μ¬μ©νλκ² μμ²΄κ° λΆνΈνλ€!!
public class Time
{
private static final int HOURS_PER_DAY = 24;
private static final int MINUTES_PER_HOUR = 60;
// public ν΄λμ€μ νλκ° λΆλ³μ΄λΌλ©΄ μ§μ λ
ΈμΆν λ λ¨μ μ΄ μ‘°κΈ μ€μ΄λ€μ§λ§ μ΄κ² μ’μ μκ°μ μλλ€.
public final int hour;
public final int minute;
public Time(int hour, int minute)
{
if (hour < 0 || hour >= HOURS_PER_DAY) {
throw new IllegalArgumentException("Hour: " + hour);
}
if (minute < 0 || minute >= MINUTES_PER_HOUR) {
throw new IllegalArgumentException("Min : " + minute);
}
this.hour = hour;
this.minute = minute;
}
}
hour, minuteμ²λΌ public ν΄λμ€μ νλκ° λΆλ³μ΄λΌλ©΄ μ§μ λ ΈμΆν λμ λ¨μ μ΄ μ‘°κΈ μ€μ΄λ€μ§λ§ μ΄λ κ² μ¬μ©νλκ²μ΄ μ¬μ ν μ’μ μκ°μ μλλ€.
μλνλ©΄ APIλ₯Ό λ³κ²½νμ§ μκ³ λ ννλ°©μμ λ°κΏ μ μκ³ , νλλ₯Ό μ½μ λ λΆμ μμ μ μνν μ μλ€λ λ¨μ μ μ¬μ νκΈ° λλ¬Έμ΄λ€.
π μ 리
Public ν΄λμ€λ μ λ κ°λ³ νλλ₯Ό μ§μ λ ΈμΆν΄μλ μλλ€.
λΆλ³ νλλΌλ©΄ λ ΈμΆν΄λ λ μννμ§λ§ μμ ν μμ¬ν μλ μλ€.