[Effective Java] Item 1. ์์ฑ์ ๋์ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ๊ณ ๋ คํ๋ผ.
by rlaehddnd0422์๋ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ค์๊ฒ ์ง์ผ์ผํ ๊ท์น๋ค์ 90๊ฐ์ ์์ดํ ์ ๋ด์ ์ฑ ์ ๋๋ค.
๊ฐ ํ ๋ง๋ณ ์ฃผ์ ๋ค์ ๋ช ๋ฃํ๊ณ ๋จ์ํ๊ฒ ํ ๋ฌธ์ฅ์ ๋ด์ Item์ผ๋ก ์๊ฐํ๋ ์ ์์ ๋ง์์ ๋ค์๋๋ฐ, ํ ์ฃผ์ 3๊ฐ ์ ๋ ์ฝ์ด๋ณด๋ฉด์ ๊ธฐ๋ก์ ๋จ๊ฒจ๋ณด๊ฒ ์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์ฑํฐ์์๋ ๊ฐ์ฒด ์์ฑ๊ณผ ํ๊ดด๋ฅผ ๋ค๋ฃน๋๋ค.
ํฌ๊ฒ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ ๋ ์ง์ผ์ผํ ๊ท์น๊ณผ, ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ๋ง์์ผ ํ ๋์ ๋ง๋ค์ด์ผ ํ ๋๋ฅผ ๊ตฌ๋ถํ๋ ๋ฐฉ๋ฒ, ์ฌ๋ฐ๋ฅธ ๊ฐ์ฒด ์์ฑ ๋ฐฉ๋ฒ๊ณผ ๋ถํ์ํ ์์ฑ์ ํผํ๋ ๋ฐฉ๋ฒ, ์ ๋ ํ๊ดด๋จ์ ๋ณด์ฅํ๊ณ ํ๊ดด ์ ์ํํด์ผ ํ ์ ๋ฆฌ ์์ ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ณธ๋ค๊ณ ํฉ๋๋ค.
Item 1์ main theme
์์ฑ์ ๋์ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ๊ณ ๋ คํ๋ผ.
ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ
- ์ด๋ค ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ์๋ 1๋ฒ ๋ฐฉ๋ฒ๊ณผ ๊ฐ์ด public ์์ฑ์๋ฅผ ์ฌ์ฉํด์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๊ณค ํฉ๋๋ค.
1. ์์ฑ์
public class Person {
private String name;
/**
* 1. public ์์ฑ์
*/
// name์ arugment๋ก ์ฃผ์
๋ฐ์ Person ์ธ์คํด์ค ์์ฑ
public Person(String name) {
this.name = name;
}
// arugment๋ฅผ ์ฃผ์
๋ฐ์ง ์๊ณ Person ์ธ์คํด์ค ์์ฑ
public Person() {
this.name = "Anonymous";
}
}
์ฌ์ค์ public ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ๋ง๊ณ ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ํ๋ ๋ ์์ต๋๋ค. ๋ฐ๋ก ์ด Item์์ ์ถ์ฒํ๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์๋ ์ฒ๋ผ์.
2. ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋
public class Person {
private static Person PERSON = new Person();
/**
* 2. ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ฌ์ฉ
*/
private static Person getInstance() {
return PERSON;
}
}
static ์์ญ์ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ๋ง๋ค์ด ๋๊ณ , ํ์ํ ๋ ๋ง๋ค ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด ๋ฐฉ์์๋ ์ฅ์ ๊ณผ ๋จ์ ๋ชจ๋ ์กด์ฌํ๋๋ฐ ๋จผ์ ์ฅ์ ๋ถํฐ ์์๋ด ์๋ค.
์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ฌ์ฉ ์ ์ฅ์
1. ์์ฑ์์ ์ด๋ฆ์ ๋ถ์ฌํ ์ ์๋ค.
ํ ํด๋์ค์ ๋ํ ์์ฑ์๊ฐ ์ฌ๋ฌ ๊ฐ ํ์ํ๋ค๋ฉด, ์์ฑ์์ ๋๊ธฐ๋ ๋งค๊ฐ๋ณ์์ ์์ฑ์ ์์ฒด๋ง์ผ๋ก๋ ๋ฐํ๋ ๊ฐ์ฒด์ ํน์ฑ์ ์ ๋๋ก ์ดํดํ๊ธฐ์๋ ์ด๋ ค์์ด ์์ต๋๋ค.
package chapter1.item1;
public class Person {
private String name;
private Integer age;
private String sex;
public Person(String name) {
this.name = name;
this.age = 20;
this.sex = "๋จ์";
}
public Person(Integer age) {
this.name = "anonynmous";
this.age = age;
this.sex = "๋จ์";
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
this.sex = "๋จ์";
}
public Person(Integer age, String sex) {
this.name = "anonynmous";
this.age = age;
this.sex = sex;
}
public Person(String name, Integer age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
์์ฑ์๋ฅผ ์ด๋ ๊ฒ ๋ฌด๋ถ๋ณํ๊ฒ ๋ง๋ค์ด ๋์ผ๋ฉด ํด๋ผ์ด์ธํธ ์ ์ฅ์์๋ ๊ฐ ์์ฑ์๊ฐ ์ธ์คํด์ค์ attribute์ ์ด๋ค ๊ฐ์ ๋์ ํ ์ง ํผ๋์ ์ผ์ผํฌ ์ ์์ต๋๋ค.
๋ฐ๋ฉด ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ ๋ฉ์๋ ์์ฒด์ ์ด๋ฆ์ ๋ถ์ฌํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ฉ์๋ ์๋ช ๋ง ์ ํ๋ค๋ฉด ๋ฐํ๋ ์ธ์คํด์ค์ ํน์ฑ์ ์ฝ๊ฒ ๋ฌ์ฌํ ์ ์์ต๋๋ค.
public class Person {
private String name;
private Integer age;
private String sex;
private static Person createByName(String name) {
Person person = new Person();
person.name = name;
person.age = 20;
person.sex = "๋จ์";
return person;
}
}
์ฆ, ํ๋์ createByName ์ด๋ผ๋ ์๊ทธ๋์ฒ๋ก๋ ์์ฑ์๋ฅผ ํ๋๋ง ๋ง๋ค๋๋ก ํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์ผ๋ก ํ์ฌ๊ธ ํผ๋์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
2. ํธ์ถํ ๋ ๋ง๋ค ์ธ์คํด์ค๋ฅผ ์๋ก ์์ฑํ์ง ์์๋ ๋๋ค.
public class Human {
private static final Human DEFAUT_HUMAN = new Human();
private static Human getInstance() {
return DEFAUT_HUMAN;
}
}
public class Main {
public static void main(String[] args) {
Human human = Human.getInstance();
}
}
์ด ๋๋ถ์ ๋ถ๋ณ ํด๋์ค๋ ์ธ์คํด์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋๊ฑฐ๋ ์๋ก ์์ฑํ ์ธ์คํด์ค๋ฅผ ์บ์ฑํ์ฌ ์ฌํ์ฉํ๋ ๋ฐฉ์์ผ๋ก ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ์ ํผํ ์ ์์ต๋๋ค.
public class Human {
private static final Human DEFAUT_HUMAN = new Human();
private Human(){}
public static Human getInstance() {
return DEFAUT_HUMAN;
}
}
- ์ด๋ ๊ฒ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋๋ ๊ธฐ๋ณธ ์์ฑ์์ ์ ์ด์๋ฅผ private์ผ๋ก ๋ง์์ค์ผ๋ก์จ new ํค์๋๋ฅผ ํตํ ๊ฐ์ฒด ์์ฑ์ ๋ง์์ค๋๋ค.
@jdk.internal.ValueBased
public final class Boolean implements java.io.Serializable,
Comparable<Boolean>, Constable
{
/**
* The {@code Boolean} object corresponding to the primitive
* value {@code true}.
*/
public static final Boolean TRUE = new Boolean(true);
/**
* The {@code Boolean} object corresponding to the primitive
* value {@code false}.
*/
public static final Boolean FALSE = new Boolean(false);
@IntrinsicCandidate
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
๋ํ์ ์ธ ์์๋ก, Boolean.valueOf(boolean) ๋ฉ์๋๋ ์ด๋ ๊ฒ ๊ฐ์ฒด๋ฅผ ์์ ์์ฑํ์ง ์๊ณ , ๋ด๋ถ์์ static ์์ญ์ ์ฌ๋ ค๋ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด๋ค ์จ์ ์ฌํ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๊ฐ์ฒด๊ฐ ์์ฃผ ์์ฒญ๋๋ ์ํฉ์์ ์ด ํจํด์ ์ ์ฉํ๋ค๋ฉด ์ฑ๋ฅ์ ๋์ด ์ฌ๋ ค์ค ์ ์๊ฒ ์ต๋๋ค.
์ฌ๊ธฐ์ ๋งํ๋ ๋ถ๋ณ ํด๋์ค๋?
1) ๋ง ๊ทธ๋๋ก ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ ํด๋์ค๋ก, ๋ ํผ๋ฐ์ค ํ์ ์ ๊ฐ์ฒด์ด๋ฉฐ, heap ์์ญ์ ์์ฑ๋๋ค.
2) ๋ํ์ ์ผ๋ก String, Boolean, Integer ๋ฑ๋ฑ์ด ์๋ค.
์ฅ์ ์ผ๋ก๋ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ ํ์ง ์๊ณ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ Thread-Safe ํ๋ค๊ณ ํ ์ ์๊ฒ ๋ค. (๋ฎ์ด์ฐ๋ ๋ฌธ์ ๊ฐ ์๋จ ๋ง์ด๋ค.)
๋จ์ ์ผ๋ก๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๋ ๊ฐ๋ง๋ค ์๋ก์ด ๊ฐ์ฒด๊ฐ ํ ๋น๋๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ ์์ฑ ๋น์ฉ์ ๋ฐ๋ฅธ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์๋ ์๊ฒ ๋ค.
-> static ์์ญ์ GC์ ๋์์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋์์ ๋ํด ์ ๊ฒฝ์จ์ผ ํ๋ค.
์ด์ ๋น์ทํ ๊ธฐ๋ฒ์ผ๋ก๋ ํ๋ผ์ด์จ์ดํธ ํจํด (Flyweight pattern)์ด ์์ต๋๋ค.
- ๊ณต์ ๋ฅผ ํตํด ๋ค์ํ ๊ฐ์ฒด๋ค์ ํจ๊ณผ์ ์ผ๋ก ์ง์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก,
- ๋ํ์ ์ผ๋ก๋ String ํ์ ์ ๊ฐ์ฒด๊ฐ String Pool์ ์ฌ์ฉํด ์ด๋ฐ ํจํด์ด ์ ์ฉ๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
- ์ด์ฐจํผ ๊ฐ ์์ฒด๋ ๋ถ๋ณ๊ฐ์ฒด๋ผ ๊ฐ์ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํด๋ ๋๊ธฐ ๋๋ฌธ์, ๋ String ์ด ๊ฐ์ ๊ฐ์ด๋ผ๋ฉด ๊ฐ์ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ฌ ๋ถํ์ํ ๋์ผ ๊ฐ์ฒด ์์ฑ์ ๋ง๊ณ ๊ฐ์ ์ฐธ์กฐ๋ฅผ ๊ณต์ ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด์ฃ .
3. ๋ฐํ ํ์ ์ ํ์ ํ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์๋ ์๋ค.
"๋ฐํํ ๊ฐ์ฒด์ ํด๋์ค๋ฅผ ์์ ๋กญ๊ฒ ์ ํํ ์ ์๊ฒ ํ๋ ์ ์ฐ์ฑ์ ์ค๋๋ค."
์ ์ ๋ฉ์๋๋ก๋ถํฐ ์ธํฐํ์ด์ค ์์ฒด๋ฅผ ๋ฐํํ๊ฒ ํ์ฌ, ๊ตฌํ ํด๋์ค๋ฅผ ๊ณต๊ฐํ์ง ์์ผ๋ฉด์ ๊ทธ ์ธ์คํด์ค๋ฅผ ๋ฐํํ ์ ์๊ฒ ํ๋ค๋ ์๋ฏธ๋ก ์ ๋ฆฌํ ์ ์๋๋ฐ, ์ฌ์ค ์ฝ์ด๋ ์๋ฏธํ์ ํ๊ธฐ๊ฐ ๋๋ฌด ์ด๋ ค์์ ์ฝ๋์์๋ก ์ ๋ฆฌํ์ ๋ถ์ด ์์ด์ ์ฐธ๊ณ ํด๋ณด์์ต๋๋ค.
public interface Grade {
String toText();
}
public static Grade of(int score) {
if(score >= 90) {
return new A();
}
if(score >=80) {
return new B();
}
return new F();
}
public class A implements Grade {
@Override
public String toText()
{
return "A";
}
}
public class B implements Grade {
@Override
public String toText()
{
return "B";
}
}
public class F implements Grade {
@Override
public String toText()
{
return "F";
}
}
public class Application {
public static void main(String[] args) {
Grade grade = Grade.of(95);
System.out.println(grade);
}
}
- Grade ์ธํฐํ์ด์ค์ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ํํ์ of()๋ฉ์๋๋ก ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฐ์ฒด๋ฅผ ์ ํํ์ฌ ๋ฐํํฉ๋๋ค.
๋ฉ์ธํจ์๋ฅผ ์ฃผ๋ชฉํด๋ณด๊ฒ ์ต๋๋ค.
๊ตฌํ์ฒด ์์ฑ ์์ ์ ๋คํ์ฑ์ ํ์ฉํ์ฌ ์ธํฐํ์ด์ค๋ก ๊ตฌํ์ฒด๋ฅผ ์์ฑํ๋๋ฐ, Grade ์ธํฐํ์ด์ค๋ ์ค์ ๊ตฌํ์ฒด๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ๋ก ๊ตฌํ์ฒด์ ์์ฑ ๊ตฌํ ๋ก์ง์ ์จ๊ธฐ๋ฉด์ API๋ ๋งค์ฐ ๊ฐ๋ฒผ์์ง๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
* ์๋ฐ 8 ์ด์ ์๋ ์ธํฐํ์ด์ค๊ฐ ์ ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์๋ค๋ ์ ํ์ด ์์์ง๋ง 8 ์ดํ์๋ ์ ํ์ด ํ๋ ธ์.
4. ์ ๋ ฅ Argument์ ๋ฐ๋ผ ๋งค๋ฒ ๋ค๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์๋ค.
3๋ฒ๊ณผ ๋น์ทํ ๋งฅ๋ฝ์ ๋๋ค. ์ฅ์ 3๋ฒ์ ์์ฑ๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด score ๊ฐ์ ๋ฐ๋ผ ๊ฐ์ฒด๋ฅผ ์ ํ์ ์ผ๋ก ๋ฐํํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
5. ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์์ฑํ๋ ์์ ์๋ ๋ฐํํ ๊ฐ์ฒด์ ํด๋์ค๊ฐ ์กด์ฌํ์ง ์์๋ ๋๋ค.
์ฝ๊ณ ๋ ์ฝ์ด๋, ์๋ฃ๋ฅผ ์ฐพ์๋ด๋ ์ด๊ฑด ๋ฌด์จ ๋ง์ธ์ง ์ ๋ง ๋ชจ๋ฅด๊ฒ ๋ค์. PASS ํ๊ฒ ์ต๋๋ค.
์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ฌ์ฉ ์ ๋จ์
๋ฌผ๋ก ์ฅ์ ๋ง ์์ง๋ ์์ต๋๋ค. ๋จ์ ์ ์์๋ด ์๋ค.
1. ์์์ ํ๋ ค๋ฉด public์ด๋ protected ์์ฑ์๊ฐ ํ์ํ๋ฏ๋ก ํ์ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
public class Person {
private String name;
private Person(){}
private static Person fromName(String name) {
Person person = new Person();
person.name = name;
return person;
}
}
public class Animal extends Person { // X, Compile Error
}
- ์์ ๊ฐ์ด ์ ์ ํฉํ ๋ฆฌ ์์ฑ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ ๋๋ private์ผ๋ก ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ๋ง์๋๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๊ธฐ ๋๋ฌธ์, ์์์ ํตํ ํ์ฅ์ด ์ด๋ ต์ต๋๋ค.
- ํ์ง๋ง ์ด์ฐ๋ณด๋ฉด ์ด ์ ์ฝ์ ์์๋ณด๋ค ์ปดํฌ์ง์ ์ ์ฌ์ฉํ๋๋ก ์ ๋ํจ๊ณผ, ๋์์ ๋ถ๋ณํ์ ์ผ๋ก ๋ง๋ค๋ ค๋ฉด ์ด ์ ์ฝ์ ์ง์ผ์ผ ํ๋ค๋ ์ ์์ ์ฅ์ ์ผ๋ก ๋ณผ ์๋ ์๊ฒ ์ต๋๋ค.
* ์ถํ Item 17, Item 18์์ ์ด ๋ด์ฉ์ด ์ธ๊ธ
2. ํ๋ก๊ทธ๋๋จธ ์ ์ฅ์์๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ด๋ ต๋ค.
์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ ์ผ๋ฐ์ ์ธ ์์ฑ์์ฒ๋ผ API ์ค๋ช ์ ๋ช ํํ ๋๋ฌ๋์ง ์์, ์ฌ์ฉ์ ์ ์ฅ์์๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ๋ฐฉ์ ํด๋์ค๋ฅผ ์ธ์คํด์คํํ ๋ฐฉ๋ฒ์ ์ง์ ์์๋ด์ผ ํ๋ค๋ ์ด๋ ค์์ด ์๋ค๋ ์ ์ ๋งํ๊ณ ์์ต๋๋ค.
์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋์ ๋ค์ด๋ฐ ์ปจ๋ฒค์
keyword | ์ค๋ช | ์์ |
from | ๋งค๊ฐ๋ณ์๋ฅผ ํ๋ ๋ฐ์์ ํด๋น ํ์ ์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ํ๋ณํ ๋ฉ์๋ | People p = People.from(name); |
of | ์ฌ๋ฌ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์ ์ธ์คํด์ค๋ฅผ ๋ฐํ | People p = People.of(name, age, sex); |
valueOf | from๊ณผ of์ ๋ ์์ธํ ๋ฒ์ | BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE); |
instance, getInstance | ๋งค๊ฐ๋ณ์๋ก ๋ช ์ํ ์ธ์คํด์ค๋ฅผ ๋ฐํํ์ง๋ง, ๊ฐ์ ์ธ์คํด์ค์์ ๋ณด์ฅํ์ง๋ ์์. | StackWalker luke = StackWalker.getInstance(options); |
create, newInstance | instance, getInstance์ ๊ฐ์ง๋ง ๋งค๋ฒ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํด ๋ฐํํจ์ ๋ณด์ฅ. | Object newArray = Array.newInstance(classObject, arrayLen); |
getType | getInstance์ ๊ฐ์ผ๋ ์์ฑํ ํด๋์ค๊ฐ ์๋ ๋ค๋ฅธ ํด๋์ค์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ์ํ ๋ ์ฌ์ฉ | FileStore fs = Files.getFileStoere(path); |
newType | newInstance์ ๊ฐ์ผ๋ ์์ฑํ ํด๋์ค๊ฐ ์๋ ๋ค๋ฅธ ํด๋์ค์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ์ํ ๋ ์ฌ์ฉ | BufferedReader br = Files.newBufferedReader(path); |
type | getType, newType์ ๊ฐ๊ฒฐํ ๋ฒ์ | List<Compaint> litany = Collections.list(legacyLitany); |
ํต์ฌ ์ ๋ฆฌ
์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋, public ์์ฑ์๋ ๊ฐ์์ ์ฐ์์๊ฐ ์๋ค. ์๋์ ์ธ ์ฅ๋จ์ ์ ์ ์ดํดํ๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ํ์ง๋ง ๋์ฒด๋ก ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๋ฆฌํ ์ ์ด ๋ง๊ธฐ ๋๋ฌธ์ ๋ฌด์์ public ์์ฑ์๋ฅผ ์ฐ๋ ์ต๊ด์ด ์๋ค๋ฉด ๊ณ ์น์.
์ด๋ ๊ฒ Item1 ์ ํ ๋ฒ ์ ๋ฆฌํด๋ดค๋๋ฐ์.
๋ด์ฉ์ด ์๊ฐ๋ณด๋ค ๊น๊ณ ์ค๋ช ์ด ๋ํดํ ๋ฟ๋ง ์๋๋ผ, ์๋ฌด๋๋ ๋ฒ์ญ๋ณธ์ด๋ค ๋ณด๋ ํ ์๋ฟ๊ฒ ์ดํดํ๋๋ฐ๋ ์ด๋ ค์์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์ ๋ฐฉ์์ด ๋ ๋ค ๋ณธ๋ก ์ ๋์ ธ๋ฒ๋ฆฌ๊ณ , ์ค๋ช ํ๋ ๋ฐฉ์์ด๋ผ ์ฑ ์ ํ ์คํธ๋ก๋ง ์จ์ ํ ์ดํดํจ์๋ ์ด๋ ค์์ด ์์ด, ๋๋ฆฌ๋๋ผ๋ ์๋ฃ๋ฅผ ์ฐพ์๊ฐ๋ฉด์ ๊ผผ๊ผผํ๊ฒ ๊ณต๋ถํด์ผ๊ฒ ์ต๋๋ค.
<์ฐธ๊ณ ์๋ฃ>
'๐ Backend > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422