- Today
- Total
- MST
- PS
- spring
- dp
- leetcode
- java
- μμμ λ ¬
- νλ‘κ·Έλλ¨Έμ€
- λ°±μ€
- 그리λ
- λ€μ΅μ€νΈλΌ
- ꡬν
- Graph
- pytorch
- CS
- μ‘Έμ μν
- λ°±μλ
- Algorithm
- μλ£κ΅¬μ‘°
- database
- tree
- array
- λ¬Έλ²
- OOP
- 벨λ§ν¬λ
- λ°μ΄ν°λ² μ΄μ€
- BFS
- μλ°μμ μ
- μΈν΄
- μλ°
Partially Committed
[CH07] κ°μ²΄μ§ν₯νλ‘κ·Έλλ°3 (OOP) λ³Έλ¬Έ
λ³Έ ν¬μ€ν μ μλ°μ μ μ κ΅μ¬λ₯Ό 곡λΆνλ©°, κ°λ¨ν μ 리/κΈ°λ‘ μ©λλ‘ μμ±νμμ΅λλ€. νΉμ¬, μλͺ»λ λ΄μ©μ΄ μλ€λ©΄ μ§μ ν΄μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€.
1. package μ import
[ν¨ν€μ§; package]
ν¨ν€μ§λ ν΄λμ€ νΉμ μΈν°νμ΄μ€λ₯Ό ν¬ν¨μν¬ μ μμ΄μ μλ‘ κ΄λ ¨λ ν΄λμ€λ€λΌλ¦¬ κ·Έλ£Ή λ¨μλ‘ λ¬Άμ΄ λμμΌλ‘μ¨ ν΄λμ€λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μλλ‘ νλ€. νλμ μμ€ νμΌμλ 첫 λ²μ§Έ λ¬Έμ₯μΌλ‘ ν ν λ²μ ν¨ν€μ§ μ μΈλ§μ νμ©νλ©°, λͺ¨λ ν΄λμ€λ λ°λμ νλμ ν¨ν€μ§μ μν΄μΌ νλ€. λν ν¨ν€μ§λ μ μ ꡬλΆμλ‘ κ³μΈ΅κ΅¬μ‘°λ₯Ό ꡬμ±ν μ μμΌλ©°, 물리μ μΌλ‘ .class νμΌμ ν¬ν¨νλ νλμ λλ ν 리μ΄λ€.
ν¨ν€μ§ μ μΈλ¬Έμ νλμ μμ€ νμΌ λΉ 1 λ²λ§ μ μΈλ μ μλ€. ν΄λμ€λͺ κ³Ό ꡬλΆνκΈ° μν΄ μλ¬Έμλ₯Ό μ¬μ©νλλ‘ νλ©°, ν¨ν€μ§λ₯Ό μ μΈνμ§ μλ κ²½μ°λ€λ κΈ°λ³Έμ μΌλ‘ μλ°μμ μ 곡νλ unnamed package λλ¬Έμ λ¬Έμ κ° μλ κ²μ΄λ€. μμ μ΄ μν ν¨ν€μ§λ₯Ό μ μΈνμ§ μμ μμ€ νμΌμ μλμ μΌλ‘ unnamed package μ μνκ² λλ€. μ΄λ ν¨ν€μ§λ₯Ό μ μΈνμ§ μμ λͺ¨λ ν΄λμ€λ€μ λμΌν unnamed package μ μνκ² λλ€λ κ²μ μλ―Ένλ€. ν° νλ‘μ νΈλ Java API μ κ°μ ν΄λμ€ λΌμ΄λΈλ¬λ¦¬λ₯Ό μμ±ν΄μΌνλ κ²½μ°μλ 미리 ν¨ν€μ§λ₯Ό ꡬμ±νμ¬ μ μ©νλ κ²μ΄ μ’λ€.
[import λ¬Έμ μ μΈ]
λ€λ₯Έ ν¨ν€μ§μ ν΄λμ€λ₯Ό μ¬μ©νλ €λ©΄ ν΄λΉ ν¨ν€μ§λͺ μ΄ ν¬ν¨λ ν΄λμ€ μ΄λ¦μ μ¬μ©ν΄μΌ νλ€. νμ§λ§ μ΄λ λ§€μ° λ²κ±°λ‘μ΄ μΌμ΄λ€. μ½λ μμ± μ΄μ μ import λ¬ΈμΌλ‘ μ¬μ©νκ³ μ νλ ν΄λμ€μ ν¨ν€μ§λ₯Ό 미리 λͺ μν΄μ£Όλ©΄ ν¨ν€μ§λͺ μ μλ΅ν μ μλ€. import λ¬Έμ μ μΈν¨μΌλ‘μ¨ μ»΄νμΌλ¬μκ² μμ€νμΌμ μ¬μ©λ ν΄λμ€ ν¨ν€μ§μ λν μ 보λ₯Ό μ 곡ν μ μλ€. μ»΄νμΌλ¬λ import λ¬Έμ ν΅ν΄μ source file μμ μ¬μ©νκ³ μλ ν΄λμ€λ€μ ν¨ν€μ§λ₯Ό νμ νμ¬, λͺ¨λ ν΄λμ€ μ΄λ¦ μμ ν¨ν€μ§ λͺ μ λΆμ¬μ€λ€.
μΌλ°μ μΌλ‘ μμ€νμΌ(*.java)μ packageλ¬Έ - importλ¬Έ - class μ μΈμ μμλ‘ λμ΄μλ€. import λ¬Έμ μ μΈνλ λ°©λ²μ import λ€μ ν¨ν€μ§λͺ .ν΄λμ€λͺ μ λΆμ΄κ±°λ, ν¨ν€μ§λͺ .* μ λΆμ΄λ©΄ λλ€. * λ₯Ό μ¬μ©νλ©΄ ν΄λΉ ν¨ν€μ§μ λͺ¨λ ν΄λμ€λ₯Ό μ¬μ©νλ€λ κ²μΌλ‘, μ»΄νμΌλ¬λ ν΄λΉ ν¨ν€μ§μμ μΌμΉνλ ν΄λμ€μ μ΄λ¦μ μ°Ύλ μΌμ μνν΄μΌ νμ§λ§ μ€ν μ μ±λ₯μμ μ°¨μ΄λ μ ν μλ€. import λ¬Έμ νλ‘κ·Έλ¨μ μ±λ₯μ μ ν μν₯μ μ£Όμ§ μκ³ , import λ¬Έμ λ§μ΄ μ¬μ©νλ©΄ μ»΄νμΌ μκ°μ΄ μμ£Ό μ‘°κΈ μ¦κ°ν λΏμ΄λ€. μ μν΄μΌν μ μ ν¨ν€μ§λͺ .* μ κ°μ΄ import λ₯Ό ν κ²½μ°μλ νμ ν¨ν€μ§μ ν΄λμ€κΉμ§ ν¬ν¨νμ§λ μλ λ€λ κ²μ΄λ€.
import java.text.SimpleDateFormat;
import java.util.Date;
class source{
public static void main(String[] args) {
Date today = new Date();
SimpleDateFormat date = new SimpleDateFormat("yyyy/MM/dd");
SimpleDateFormat time = new SimpleDateFormat("hh:mm:ss a");
System.out.println("date = " + date.format(today));
System.out.println("time = " + time.format(today));
}
}
[static import λ¬Έ]
static import λ₯Ό μ¬μ©νλ©΄ static λ©€λ²λ₯Ό νΈμΆν λ ν΄λμ€μ μ΄λ¦μ μλ΅ν μ μλ€. νΉμ ν΄λμ€μ static λ©€λ²λ₯Ό μμ£Ό μ¬μ©νλ κ²½μ°μ νΈλ¦¬νλ©°, μ½λκ° κ°λ¨ν΄μ§λ€.
import static java.lang.System.out;
import static java.lang.Math.*;
class source{
public static void main(String[] args) {
//System.out.println(Math.random());
out.println(random());
out.println(PI);
}
}
2. μ μ΄μ(Modifier)
[μ μ΄μλ?]
λ©μλ μ μΈλΆμ μ¬μ©λμ΄ λΆκ°μ μΈ μλ―Έ/κΈ°λ₯μ λΆμ¬νλ€. μ κ·Ό μ μ΄μμ κ·Έ μΈ μ μ΄μλ‘ κ΅¬λΆν μ μλ€.
μ κ·Ό μ μ΄μλ public, protected, default, private κ° μκ³ μΈμλ static, final, abstract, native, transient, synchronized, volatile, strictfp κ° μλ€. λ©€λ² λ³μμ λ©μλ, ν΄λμ€μ μ¬μ©λλ©° μ¬λ¬ μ μ΄μλ₯Ό μ‘°ν©νμ¬ μ¬μ©ν μ μλ€. λ€λ§ μ κ·Ό μ μ΄μλ μ¬λ¬ κ°λ₯Ό μ‘°ν©νμ¬ μ¬μ©ν μ μλ€.
Static - ν΄λμ€μ, 곡ν΅μ μΈ
static μ 'ν΄λμ€μ' λλ '곡ν΅μ μΈ' μ΄λΌλ μλ―Έλ₯Ό κ°μ§κ³ μλ€. μΈμ€ν΄μ€ λ³μλ νλμ ν΄λμ€λ‘λΆν° μμ±λμ΄λ κ°κ° λ€λ₯Έ κ°μ κ°μ§μ§λ§ static λ³μλ κ°μ κ°μ κ°μ§λ€.(곡μ ) static ν€μλκ° λΆμ λ©€λ²λ³μ, λ©μλ, μ΄κΈ°νλΈλμ μΈμ€ν΄μ€μ κ΄κ³ μμ΄ ν΄λμ€μλ§ κ΄κ³λ κ²μ΄κΈ° λλ¬Έμ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ λ μ¬μ©μ΄ κ°λ₯νλ€. μΈμ€ν΄μ€ λ©μλμ static λ©μλμ μ°¨μ΄μ μ λ¬Όμ΄λ³Έλ€λ©΄, 맀μλ λ΄μμ μΈμ€ν΄μ€ λ©€λ²λ₯Ό μ¬μ©νλλ μ¬λΆκ° ν΅μ¬μ΄λ€.
static λ©€λ²λ³μλ λͺ¨λ μΈμ€ν΄μ€μ λνμ¬ κ³΅ν΅μ μΌλ‘ μ¬μ©λλ ν΄λμ€ λ³μμ΄λ©°, μΈμ€ν΄μ€ μμ± μμ΄λ μ¬μ©μ΄ κ°λ₯νκ³ ν΄λμ€κ° λ©λͺ¨λ¦¬μ λ‘λλ λ μμ±λλ€.
static λ©μλλ μΈμ€ν΄μ€ μμ± μμ΄ νΈμΆ κ°λ₯ν λ©μλλ‘, static λ©μλ λ΄μμλ μΈμ€ν΄μ€ λ©€λ²λ₯Ό μ§μ μ μΌλ‘ μ κ·Όν μ μλ€.
κ°λ₯νλ©΄ static λ©μλλ‘ μ μΈνλ κ²μ΄ μΈμ€ν΄μ€ μμ± μμ΄λ νΈμΆμ΄ κ°λ₯νλ―λ‘ ν¨μ¨μ μ΄λ€. μΈμ€ν΄μ€ λ©€λ²λ₯Ό μ¬μ©νκ³ μμ§ μλ€λ©΄ static λ©μλλ‘ μ μΈνλ κ²μ κ³ λ €ν΄λ³΄λ κ²μ΄ μ’λ€.
Final - λ§μ§λ§μ, λ³κ²½λ μ μλ
final μ ν΄λμ€, λ©μλ, λ©€λ²λ³μ, μ§μλ³μμ μ¬μ©ν μ μμΌλ©° λ³μμ μ¬μ©ν κ²½μ°μλ μμκ° λκ³ λ©μλμ μ¬μ©νλ©΄ μ€λ²λΌμ΄λ©μ΄ λΆκ°λ₯ν΄μ§λ©° ν΄λμ€μ μ¬μ©νλ©΄ μκΈ° μμ μ νμ₯νλ μμ ν΄λμ€λ₯Ό μ μν μ μκ² λλ€. final ν΄λμ€λ λ³κ²½ν μ μλ(νμ₯ λΆκ°λ₯ν) ν΄λμ€μ΄λ©°, final λ©μλλ λ³κ²½λ μ μλ λ©μλλ‘ μ€λ²λΌμ΄λ©μ ν΅ν μ¬μ μκ° λΆκ°λ₯νλ€. final λ©€λ²λ³μ νΉμ μ§μ λ³μλ μμλ‘μ λμνλ€.
final class FinalTest{
final int MAX_SIZE = 10;
final void getMaxSize() {
final int LV = MAX_SIZE;
return MAX_SIZE;
}
}
μμ±μλ₯Ό μ΄μ©ν final λ©€λ² λ³μλ μμμ΄κΈ° λλ¬Έμ μ μΈκ³Ό λμμ μ΄κΈ°ννμ§λ§, μΈμ€ν΄μ€ λ³μλ μμ±μμμ μ΄κΈ°νλ μ μλλ‘ ν μ μλ€. ν΄λμ€ λ΄μμ λ§€κ° λ³μλ₯Ό κ°μ§λ μμ±μλ₯Ό λ§λ€κ³ , μΈμ€ν΄μ€λ₯Ό μμ±ν λ final λ©€λ²λ³μ μ΄κΈ°νμ νμν κ°μ 맀κ°λ³μλ‘λΆν° μ 곡λ°λλ‘ νλ©΄ λλ€. μ΄λ κ² νλ©΄ final λ©€λ² λ³μκ° κ°κ°μ μΈμ€ν΄μ€λ§λ€ λ€ λ€λ₯Έ κ°μ κ°μ§λλ‘ ν μ μλ€.
class Card{
final int NUMBER;
final String KIND;
static int width = 100;
static int height = 250;
Card(String kind, int num){
KIND = kind;
NUMBER = num;
}
Card(){
this("HEART", 1);
}
public String toString(){
return KIND + " " + NUMBER;
}
}
class source{
public static void main(String[] args) {
Card c = new Card("HEART" , 10);
//c.NUMBER = 5;
//ERROR!
//Can't assign a value to final variable NUMBER.
System.out.println(c.KIND);
System.out.println(c.NUMBER);
System.out.println(c);
}
}
Abstract - μΆμμ, λ―Έμμ±μ
Abstract μ λ―Έμμ±μ μλ―Έλ₯Ό κ°μ§κ³ μμ΄, λ©μλμ μ μΈλΆλ§ μμ±νκ³ μ€μ μν λ΄μ©μ ꡬννμ§ μμ μΆμ λ©μλ μ μΈ μ μ¬μ©λλ€.ν΄λμ€, λ©μλμ μ¬μ©ν μ μμΌλ©° abstract ν΄λμ€λ ν΄λμ€ λ΄μ μΆμ λ©μλκ° μ μΈλμ΄ μμμ μλ―Ένλ κ²μ΄κ³ abstract λ©μλλ μΆμ λ©μλ(μ μΈλΆλ§ μμ±λ λ©μλ) μμ μλ―Ένλ€. μΆμ ν΄λμ€λ μΆμ λ©μλκ° μ‘΄μ¬νλ ν΄λμ€μ΄κΈ° λλ¬Έμ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€. μμΈν λ΄μ©μ μΆνμ λ€λ£¨λλ‘ νμ.
μ κ·Ό μ μ΄μ(Access modifier)
μ κ·Ό μ μ΄μλ λ©€λ², ν΄λμ€μ μ¬μ©ν μ μλ€. μΈλΆμμ μ κ·Όν μ μλ λ²μλ₯Ό μ ννλ μν μ νλ€. private λ κ°μ ν΄λμ€ λ΄μμλ§ μ κ·Όμ΄ κ°λ₯ν κ²μ΄κ³ , default λ κ°μ ν¨ν€μ§ λ΄μμλ§ μ κ·Όμ΄ κ°λ₯νκ³ protected λ κ°μ ν¨ν€μ§ λ΄μ λ€λ₯Έ ν¨ν€μ§μ μμ ν΄λμ€μμ μ κ·Όμ΄ κ°λ₯ν κ²μ΄λ€. public μ μλ¬΄λ° μ κ·Ό μ νμ΄ μλ€.
public > protected > default > private
ν΄λμ€μλ public, default λ₯Ό μ¬μ©ν μ μκ³ λ©μλ, λ©€λ²λ³μμλ public, protected, default, private λ₯Ό μ¬μ©ν μ μμΌλ©° μ§μ λ³μμλ μ¬μ©ν μ μλ€.
μ κ·Ό μ μ΄μλ₯Ό μ¬μ©νλ λͺ©μ μ ν΄λμ€ λ΄λΆ λ³μμ 보νΈλ₯Ό μν κ²μΌλ‘, λ°μ΄ν°κ° μ ν¨ν κ°μ μ μ§νκ³ λ³΄μμ μ μ§νκΈ° μν¨μ΄λ€. μ΄λ₯Ό λ°μ΄ν° κ°μΆκΈ°(data hiding), μΊ‘μν(encasulation) μ΄λΌκ³ νλ€. λν ν΄λμ€ λ΄μμλ§ μ¬μ©λλ λ©€λ² λ³μλ λ©μλμ κ°μ λ©€λ²λ€μ ν΄λμ€ λ΄λΆμ κ°μΆ€μΌλ‘μ¨ λ³΅μ‘μ±μ μ€μΌ μ μλ€.
μ κ·Ό μ μ΄μλ₯Ό μ¬μ©νλ μ΄μ
1. μΈλΆλ‘λΆν° λ°μ΄ν°λ₯Ό 보νΈνκΈ° μν΄μ
2. μΈλΆμλ λΆνμν, λ΄λΆμ μΌλ‘λ§ μ¬μ©λλ λΆλΆμ κ°μΆκΈ° μν΄μ
μ΄λ€ λ©μλλ₯Ό λ³κ²½ν΄μΌνλ μμ μ΄ νμνλ€κ³ κ°μ ν΄λ³΄μ. ν΄λΉ λ©μλκ° public μ΄λΌλ©΄, λ©μλλ₯Ό λ³κ²½ν λ€μ μ 체μ μΌλ‘ ν μ€νΈλ₯Ό κ±°μ³μΌ νλ€. default λΌλ©΄ κ°μ ν¨ν€μ§ λ΄μμλ§ ν μ€νΈνλ©΄ λκ³ , private λΌλ©΄ κ°μ ν΄λμ€ λ΄μμλ§ νμΈν΄μ£Όλ©΄ λλ€. μ΄μ κ°μ΄ μ κ·Ό μ μ΄μλ₯Ό μ΄λ»κ² μ§μ νλλμ λ°λΌμ μμ λΆνλ ν¬κ² λ¬λΌμ§λ€.
public class source{
public int hour;
public int miniute;
public int second;
public static void main(String[] args) {
source t = new source();
t.hour = 25;
}
}
μμ κ°μ ν΄λμ€κ° μλ€κ³ νμ. μΈμ€ν΄μ€λ₯Ό μμ±ν λ€μ hour κ°μ 25 λ‘ λ°κΏμ£Όμλ€. κ·Όλ° μ¬μ€ hour μ΄ 25 κ° λλ©΄ λ°μ΄ν° 무결μ±μ μλ°λλ€. μ΄μ κ°μ΄ λ©€λ² λ³μμ κ°μ μ ν¨νμ§ μκ² λ³κ²½νλ μμ μ λν μλ¬΄λ° λμμ± μ΄ μ‘΄μ¬νμ§ μλλ€. μ΄λ¬ν κ²½μ°, λ©€λ² λ³μλ₯Ό private λ protected λ‘ μ ννκ³ λ©€λ² λ³μμ κ°μ λ³κ²½νκ³ μ½μ μ μλ public λ©μλλ₯Ό μ 곡νμ¬ κ°μ μ μΌλ‘ λ©€λ²λ³μμ κ°μ λ€λ£° μ μκ² νμ¬, λ°μ΄ν°λ₯Ό μ ν¨νκ² λ§λ€ μ μλλ‘ ν μ μλ€.
public class source{
private int hour;
private int minute;
private int second;
public int getHour(){return hour;}
public void setHour(int hour){
if(hour<0 || hour>23) return;
this.hour = hour;
}
public int getMinute(){return minute;}
public void setMinute(int minute){
if(minute<0 || minute>59) return;
this.minute = minute;
}
public int getSecond(){return second;}
public void setSecond(int second){
if(second<0 || second>59) return;
this.second = second;
}
}
μ΄μ κ°μ΄ getter, setter μ λ§λ€μ΄ λ°μ΄ν°μ μ ν¨μ±μ μλ°νμ§ μλλ‘ μ νν μ μλ€.
[μμ±μμ μ κ·Ό μ μ΄μ]
μμ±μμ μ κ·Ό μ μ΄μλ₯Ό μ¬μ©νμ¬ μΈμ€ν΄μ€ μμ±μ μ νν μ μλ€. μμ±μλ₯Ό private λ‘ μ§μ νλ©΄ μΈλΆμμ μμ±μμ μ κ·Όν μ μκ² λμ΄, μΈμ€ν΄μ€λ₯Ό μμ±ν μ μκ³ μ€μ§ ν΄λμ€ λ΄λΆμμλ§ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μκ² λλ κ²μ΄λ€.
final class Singleton {
private static Singleton s = new Singleton();
private Singleton(){
//
}
public static Singleton getInstance() {
return s;
}
}
μμ κ°μ΄ μμ±μλ₯Ό private λ‘ μ€μ νμ¬, μΈμ€ν΄μ€λ₯Ό μ§μ μ μΌλ‘ μμ±νμ§ λͺ»νλλ‘ νλ€. κ·Έλ¦¬κ³ public λ©μλλ₯Ό ν΅ν΄μ μΈμ€ν΄μ€μ μ κ·Όνλλ‘ ν¨μΌλ‘μ¨ μ¬μ©κ°λ₯ν μΈμ€ν΄μ€ κ°μλ₯Ό μ νν μ μλ€. μ μν΄μΌν μ μ μμ±μκ° private μΈ ν΄λμ€λ λ€λ₯Έ ν΄λμ€μ μ‘°μμ΄ λ μ μλ€. μμ ν΄λμ€λ μΈμ€ν΄μ€κ° μμ±λ λ, μμλ°μ ν΄λμ€μ μμ±μλ₯Ό νΈμΆνλλ° μμ κ²½μ° private λ‘ λμ΄μκΈ° λλ¬Έμ νΈμΆμ΄ λΆκ°λ₯ν΄μ§λ€. κ·Έλμ μ΄λ¬ν κ²½μ°μλ ν΄λΉ ν΄λμ€μ final ν€μλλ₯Ό λΆμ¬μ, λ μ΄μ μμν μ μλ ν΄λμ€μμ λͺ μνλ κ²μ΄ μ’λ€ .
[μ μ΄μ;modifiler μ μ‘°ν©]
λ λ€μν μ μ΄μλ€μ΄ μ‘΄μ¬νμ§λ§, μΌλ¨ μ΄ μ λλ‘λ§ μ 리νλλ‘ νμ. μλλ λμμ λ°λΌ μ¬μ© κ°λ₯ν μ μ΄μλ€μ΄λ€.
ν΄λμ€ : public, default, final, abstract
λ©μλ : λͺ¨λ μ κ·Ό μ μ΄μ, final, abstract, static
λ©€λ²λ³μ : λͺ¨λ μ κ·Ό μ μ΄μ, final, static
μ§μλ³μ : final
μ μ΄μλ₯Ό μ‘°ν©νμ¬ μ¬μ©ν λμλ λͺ κ°μ§ μ‘°μ¬ν΄μΌν μ μ΄ μλ€.
1. λ©μλμ static κ³Ό abstract λ₯Ό κ°μ΄ μ¬μ©ν μ μλ€.
: static λ©μλλ λͺΈν΅μ΄ μλ λ©μλμλ§ μ¬μ©μ΄ κ°λ₯νλ€.
2. ν΄λμ€μ abstract μ final μ λμμ μ¬μ©ν μ μλ€.
: ν΄λμ€μ μ¬μ©λλ final μ ν΄λμ€λ₯Ό νμ₯ν μ μλ€λ μλ―Έμ΄κ³ abstract λ μμμ ν΅ν΄ μμ±λμ΄μΌ νλ€λ κ²μ΄λ―λ‘ μλ‘ λͺ¨μλλ€.
3. abstract λ©μλμ μ κ·Ό μ μ΄μκ° private μΌ μλ μλ€.
: abstract λ©μλλ μμ ν΄λμ€μμ ꡬνν΄μΌ νλλ° μ κ·Ό μ μ΄μκ° private μ΄λ©΄ μμ ν΄λμ€μμ μ κ·Όμ΄ λΆκ°λ₯ν΄μ§λ€.
4. λ©μλμ private μ final μ κ°μ΄ μ¬μ©νλ κ²μ λΉν¨μΈμ μ΄λ€.
: μ κ·Ό μ μ΄μκ° private μ΄λ©΄ μ€λ²λΌμ΄λ© λ μ μλ€. λ μ€ νλλ§ μ¬μ©ν΄λ μΆ©λΆνλ€.
3. λ€νμ±(polymorphism)
[λ€νμ±μ μ μ]
λ€νμ±(polymorphism)μ΄λ μ¬λ¬ κ°μ§ ννλ₯Ό κ°μ§ μ μλ λ₯λ ₯μ λ§νλ€. μλ°μμλ μ‘°μ ν΄λμ€ νμ μ μ°Έμ‘° λ³μλ‘ μμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλλ‘ νμ¬ λ€νμ±μ ꡬννμλ€. μλμ μ½λλ₯Ό 보μ.
class Tv{
boolean power;
int channel;
void power(){ };
void channelUp(){};
void channelDown(){};
}
class CaptionTv extends Tv{
String text;
void caption() {};
}
μμ κ°μ κ΄κ³μμ λ³΄ν΅ μλμ κ°μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νμ¬ μ°Έμ‘°νμλ€.
Tv t = new Tv();
CaptionTv c = new CaptionTv();
νμ§λ§ μλμ κ°μ΄ ν μλ μλ€.
CaptionTv c = new CaptionTv();
Tv t = new CaptionTv();
μ‘°μ ν΄λμ€ νμ μ μ°Έμ‘° λ³μλ‘ μμ ν΄λμ€ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν κ²μ΄λ€. κ·Έλ λ€λ©΄ κ°μ νμ μ μ°Έμ‘° λ³μλ‘ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν κ²κ³Ό, λ€λ₯Έ νμ (μ‘°μ ν΄λμ€)μ μ°Έμ‘° λ³μλ‘ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν κ²μ μ΄λ ν μ°¨μ΄κ° μμκΉ? μ‘°μ ν΄λμ€ νμ μ μ°Έμ‘° λ³μλ‘ μμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλ κ²½μ°μλ μ‘°μ ν΄λμ€μ λ©€λ²(μμλ°μ λ©€λ²)λ§ μ¬μ©ν μ μλ€. μ¦, μ‘°μ ν΄λμ€ νμ μΌλ‘ μ°Έμ‘°νλ©΄ CaptionTv μΈμ€ν΄μ€ μ€μμ Tv ν΄λμ€μμ μ μλμ§ μμ λ©€λ²λ μ¬μ©νμ§ λͺ»νλ€λ κ²μ΄λ€. κ°μ νμ μ μΈμ€ν΄μ€μ΄μ§λ§ μ°Έμ‘° λ³μμ νμ μ μ΄λ»κ² νλλμ λ°λΌμ μ¬μ© κ°λ₯ν λ©€λ²μ κ°μκ° λ¬λΌμ§λ€λ κ²μ΄ ν΅μ¬μ΄λ€. κ·ΈλΌ μμ ν΄λμ€ νμ μΌλ‘ μ°Έμ‘°λ³μλ₯Ό λ§λ€κ³ , μ‘°μ ν΄λμ€ νμ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλ κ²μ κ°λ₯ν κΉ? λΆκ°λ₯νλ€. μλλ©΄ μ€μ μΈμ€ν΄μ€λ³΄λ€ μ°Έμ‘° λ³μκ° μ¬μ©ν μ μλ λ©€λ²μ κ°μκ° λ λ§κΈ° λλ¬Έμ, μ‘΄μ¬νμ§ μμ λ©€λ²λ₯Ό μ¬μ©νλ €κ³ ν μ μκΈ° λλ¬Έμ΄λ€. μ°Έμ‘°λ³μκ° μ¬μ©ν μ μλ λ©€λ²μ κ°μλ μΈμ€ν΄μ€μ λ©€λ² κ°μλ³΄λ€ κ°κ±°μ μμμΌ νλ€.
μ‘°μ νμ μ μ°Έμ‘°λ³μλ‘ μμ νμ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλ€.
μμ νμ μ μ°Έμ‘° λ³μλ‘ μ‘°μ νμ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μλ μλ€.
[μ°Έμ‘° λ³μμ νλ³ν]
κΈ°λ³Έν λ³μμ λ§μ°¬κ°μ§λ‘ μ°Έμ‘°λ³μλ νλ³νμ΄ κ°λ₯νλ€. νμ§λ§ μ€λ‘μ§ μμ κ΄κ³μ λμ¬μλ ν΄λμ€ κ°μμλ§ κ°λ₯νλ€λ κ²μ΄ μ°¨μ΄μ μ΄λ€. μμνμ μ μ‘°μ νμ μΌλ‘ νλ³ννλ κ²μ μ μΊμ€ν μ΄λΌκ³ νλλ°, μ΄λ μλ΅μ΄ κ°λ₯νλ€. λ°λ©΄ μ‘°μ νμ μ μμ νμ μΌλ‘ νλ³ννλ λ€μ΄ μΊμ€ν μ μλ΅μ΄ λΆκ°λ₯νλ€. μλλ©΄ μ μΊμ€ν μ ν κ²½μ°μλ μ°Έμ‘° λ³μμ λ©€λ²κ° μΈμ€ν΄μ€μ λ©€λ²λ³΄λ€ μ κ±°λ κ°μ κ²μ΄ 보μ₯μ΄ λλλ° λ°ν΄ λ€μ΄ μΊμ€ν μ κ²½μ°μλ μ°Έμ‘° λ³μμ λ©€λ²κ° μΈμ€ν΄μ€μ λ©€λ²λ³΄λ€ λ§μ κ²μ΄κΈ° λλ¬Έμ μλ΅μ΄ λΆκ°λ₯ν κ²μ΄λ€. κ·Έλμ μ°Έμ‘°λ³μμ νλ³νμ νκΈ° μ μ instanceof μ°μ°μλ₯Ό μ΄μ©ν΄μ μ°Έμ‘°λ³μκ° μ°Έμ‘°νκ³ μλ μ€μ μΈμ€ν΄μ€μ νμ μ΄ λ¬΄μμΈμ§ 체ν¬νλ κ²μ΄ μμ νλ€. νλ³νμ μ°Έμ‘° λ³μμ νμ μ λ³νν λΏμ΄λ―λ‘ μΈμ€ν΄μ€μ κ΄κ³ μλ€. κ·Έλ₯ μ°Έμ‘° λ³μμ νμ μ μ‘°μ ν¨μΌλ‘μ¨ μ°Έμ‘°νκ³ μλ μΈμ€ν΄μ€μμ μ¬μ©ν μ μλ λ©€λ²μ κ°μλ₯Ό μ νν λΏμ΄λ€.
Car ν΄λμ€λ₯Ό μμλ°μ FireEngine ν΄λμ€κ° μλ€κ³ κ°μ νμ. κ·Έλ¦¬κ³ Car μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν€λ μ°Έμ‘°λ³μ car μ FireEngine νμ μ μ°Έμ‘°λ³μ fe κ° μ£Όμ΄μ‘λ€. fe = (FireEngine)car μ κ°μ΄ νλ©΄ down - casting μ΄λ―λ‘ μ»΄νμΌ μ μλ¬΄λ° λ¬Έμ κ° λ°μνμ§ μλλ€. νμ§λ§ μ€μ λ‘ car μ Car ν΄λμ€μ λν μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν€λ μ°Έμ‘°λ³μμ΄κ³ μ΄λ₯Ό μννκ² λλ©΄ κ²°κ΅μ μμ νμ μ μ°Έμ‘° λ³μλ‘ μ‘°μ νμ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νκ² λλ κ²μ΄λ€. μ΄λ μμμ μΈκΈνμλ― κ°λ₯νμ§ μμ κ²μΈλ°, κ·ΈλΌμλ μ»΄νμΌ μμλ μ€λ₯κ° λ°μνμ§ μλ κ²μ κ·Έμ μ°Έμ‘° λ³μ κ°μ κ΄κ³λ§ λ°μ§κΈ° λλ¬Έμ΄λ€. μ΄μ κ°μ κ²½μ° λλ¬Έμ instanceof μ°μ°μλ₯Ό μ΄μ©νμ¬ μ°Έμ‘° λ³μκ° κ°λ¦¬ν€λ μΈμ€ν΄μ€μ νμ μ΄ λ¬΄μμΈμ§ νμΈνλ κ²μ΄ μ€μνλ€. μλ‘ μμ κ΄κ³μ λμ¬μ§ νμ κ° νλ³νμ μμ λ‘μ§λ§ μ°Έμ‘°λ³μκ° κ°λ¦¬ν€λ μΈμ€ν΄μ€μ μμ νμ μΌλ‘μ νλ³νμ νμ©λμ§ μλ κ²μ μ£Όμνμ.
[Instanceof μ°μ°μ]
μ°Έμ‘°λ³μκ° μ°Έμ‘°νκ³ μλ μΈμ€ν΄μ€μ νμ μ μκΈ° μν΄ instanceof μ°μ°μλ₯Ό μ¬μ©ν μ μλ€. 쑰건문μ μ£Όλ‘ μ¬μ©νλ©°, μΌνΈμλ μ°Έμ‘°λ³μλ₯Ό μ€λ₯ΈνΈμλ νμ (ν΄λμ€λͺ )μ΄ νΌμ°μ°μκ° λλ€. κ²°κ³Ό κ°μ true/false μ boolean μΌλ‘ μ£Όμ΄μ§λ©° true λ₯Ό λ°ννλ€λ κ²μ μ°Έμ‘°λ³μκ° testing ν νμ μΌλ‘μ νλ³νμ΄ λ¬Έμ μμ΄ μνμ΄ κ°λ₯νλ€λ κ²μ μλ―Ένλ€.
void doWork(Car c){
if (c instanceof FireEngine) {
FireEngine fe = (FireEngine)c;
fe.water();
...
}
μμ κ°μ΄ μ¬μ©ν μ μλ€. μ 리νμλ©΄ μ΄λ€ νμ μ λν instanceof μ°μ°μ κ²°κ³Όκ° true λΌλ κ²μ κ²μ¬ν νμ μΌλ‘μ νλ³νμ΄ κ°λ₯νλ€λ κ²μ μμ¬νλ€.
[μ°Έμ‘°λ³μμ μΈμ€ν΄μ€μ μ°κ²°]
μ‘°μ ν΄λμ€μ μ μλμ΄ μλ λ©€λ² λ³μμ μ€λ³΅λλ μ΄λ¦μ κ°μ§λ μΈμ€ν΄μ€ λ³μλ₯Ό μμ ν΄λμ€μμλ μ μνμμ λμλ μ°Έμ‘° λ³μμ νμ μ λ°λΌμ λ€λ₯Έ λ³μλ₯Ό νΈμΆνλ€. μ‘°μ ν΄λμ€ νμ μΈ κ²½μ°μλ μ‘°μ ν΄λμ€μ μ μλ λ³μλ₯Ό νΈμΆνκ³ , μμ ν΄λμ€ νμ μΈ κ²½μ°μλ μμ ν΄λμ€μ μ μλ λ³μλ₯Ό νΈμΆνλ€. λ©μλμ κ²½μ°μλ μ°Έμ‘° λ³μμ νμ μ κ΄κ³μμ΄ μ€μ μΈμ€ν΄μ€μ λ©μλκ° νΈμΆλλ€. μλ μ½λλ₯Ό 보μ.
class source{
public static void main(String[] args) {
Parent p = new Child();
Child c = new Child();
System.out.println("p.x = " + p.x );
p.method();
System.out.println("c.x = " + c.x);
c.method();
}
}
class Parent{
int x = 100;
void method(){
System.out.println("Parent Method");
}
}
class Child extends Parent{
int x = 200;
void method(){
System.out.println("Child Method");
}
}
Parent νμ μ μ°Έμ‘°λ³μ p λ‘ Child μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νκ² νμκ³ , Child νμ μ μ°Έμ‘°λ³μ c λ‘ Child μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νκ² νμλ€. p.x λ₯Ό νΈμΆν κ²½μ°μλ p κ° Parent νμ μ μ°Έμ‘°λ³μμ΄λ―λ‘ Parent ν΄λμ€μ μ μλ x κ°μΈ 100 μ μΆλ ₯νλ κ²μ΄κ³ c.x λ₯Ό νΈμΆν κ²½μ°μλ c κ° Child νμ μ μ°Έμ‘°λ³μμ΄λ―λ‘ Child ν΄λμ€μ μ μλ x κ°μΈ 200 μ΄ μΆλ ₯λλ κ²μ΄λ€. method() μ κ²½μ°μλ μ€μ μΈμ€ν΄μ€μ νμ μ λ°λΌκ°λ―λ‘ Child ν΄λμ€μ μ μλ method() κ° νΈμΆλλ€. μλμ κ°μ΄ Child ν΄λμ€μ μ무κ²λ μμ±νμ§ μλλ€λ©΄ μμλ°μ ν΄λμ€μ μ€λ³΅λ λ©€λ² λ³μλ method κ° μ‘΄μ¬νμ§ μνλ€. μ΄λ¬ν κ²½μ°μλμ°Έμ‘°λ³μμ νμ μ λ°λ₯Έ λ³νλ μλ€. μ°Έμ‘° λ³μμ νμ μ λ°λΌμ λ€λ₯Έ κ²°κ³Όλ₯Ό κ°μ Έμ€λ κ²½μ°λ μ€λ‘μ§ μ‘°μ ν΄λμ€μ λ©€λ² λ³μμ κ°μ μ΄λ¦μ λ©€λ²λ³μλ₯Ό μμ ν΄λμ€μ μ€λ³΅νμ¬ μ μν κ²½μ° λΏμ΄λ€.
class source{
public static void main(String[] args) {
Parent p = new Child();
Child c = new Child();
System.out.println("p.x = " + p.x );
p.method();
System.out.println("c.x = " + c.x);
c.method();
}
}
class Parent{
int x = 100;
void method(){
System.out.println("Parent Method");
}
}
class Child extends Parent{
// nothing
}
[맀κ°λ³μμ λ€νμ±]
class Product{
int price;
int bonusPoint;
Product(int price){
this.price = price;
bonusPoint = (int)(price/10.0);
}
}
class Tv extends Product{
Tv(){
super(100);
}
public String toString(){return "Tv";}
}
class Computer extends Product{
Computer(){
super(200);
}
public String toString(){return "Computer";}
}
class Buyer{
int money = 1000;
int bonusPoint = 0;
void buy(Product p){
if(money < p.price)
{
System.out.println("no money");
return;
}
money -= p.price;
bonusPoint += p.bonusPoint;
System.out.println("you have purchased " + p);
}
}
class source{
public static void main(String[] args) {
Buyer b = new Buyer();
b.buy(new Tv());
b.buy(new Computer());
System.out.println("balance : $" + b.money);
System.out.println("bonus Point : " + b.bonusPoint );
}
}
μ μ½λλ₯Ό 보면, Product μ μμ ν΄λμ€μΈ Tv, Computer, Audio κ° μκ³ Buyer ν΄λμ€μμ 물건μ ꡬμ νλ κΈ°λ₯μ΄ λ΄κΈ΄ λ©μλμΈ buy λ₯Ό μ μνμμ λ, 맀κ°λ³μλ₯Ό Tv, Computer, Audio λ³λ‘ λ°λ‘ ꡬννμ§ μκ³ κ³΅ν΅μ μ‘°μ ν΄λμ€μΈ Product λ‘ μ¬μ©νμ¬ κ΅¬ννμλ€, μ΄μ κ°μ΄ κ°λ₯ν κ²μ 맀κ°λ³μμμλ λ€νμ±μ μ μ©ν μ μκΈ° λλ¬Έμ΄λ€.
[μ¬λ¬ μ’ λ₯μ κ°μ²΄λ₯Ό λ°°μ΄λ‘ λ€λ£¨κΈ°]
μμμ Product μ μμ ν΄λμ€μΈ Tv, Computer, Audio λ₯Ό κ°κ° κ°λ³μ μΌλ‘ λ€λ£¨μλλ° Product νμ μ μ°Έμ‘°λ³μ λ°°μ΄λ‘ μ²λ¦¬νμ¬ λ³΄λ€ κ°λ¨νκ² κ΅¬νν μ μλ€.
Product p[] = new Product[3];
p[0] = new Tv();
p[1] = new Computer();
p[2] = new Audio();
μ΄λ₯Ό μ΄μ©νμ¬ Buyer ν΄λμ€λ₯Ό μμ νλ©΄ μλμ κ°λ€.
class Buyer{
int money = 1000;
int bonusPoint = 0;
Product[] item = new Product[10];
int i = 0;
void buy(Product p){
if(money < p.price)
{
System.out.println("no money");
return;
}
money -= p.price;
bonusPoint += p.bonusPoint;
item[i++] = p;
System.out.println("you have purchased " + p);
}
}
μ΄μ κ°μ΄ μμ νμ¬ λ°°μ΄ item μ ꡬμ ν λ¬Όκ±΄μ΄ μ μ₯λλλ‘ κ΅¬νν μ μλ€. λͺ¨λ μ ν ν΄λμ€μ μ‘°μ ν΄λμ€μΈ Product ν΄λμ€ νμ μ λ°°μ΄μ μ¬μ©νμ¬ κ΅¬μ ν μ νμ νλμ λ°°μ΄λ‘ κ°λ¨νκ² λ€λ£° μ μκ² λμλ€. λ€λ§ item λ°°μ΄μ ν¬κΈ°λ₯Ό 10μΌλ‘ κ³ μ νκΈ° λλ¬Έμ 물건μ 10κ°λ³΄λ€ λ§μ΄ μ¬κ²λλ κ²½μ°μ λν λλΉμ± μ΄ μλ€. μ΄λ¬ν κ²½μ°μλ λ°°μ΄μ μλ‘ λ§λ€κ³ , 볡μ¬ν΄μ£Όλ©΄ λλλ° μ΄λ³΄λ€λ Vector ν΄λμ€λ₯Ό μ¬μ©νλ κ²μ΄ ν¨μ¨μ μ΄λ€. Vector ν΄λμ€λ λ΄λΆμ μΌλ‘ Object νμ μ λ°°μ΄μ κ°μ§κ³ μκ³ , ν¬κΈ°λ₯Ό μμμ κ΄λ¦¬ν΄μ£ΌκΈ° λλ¬Έμ μΈμ€ν΄μ€μ κ°μλ₯Ό κ³ λ €νμ§ μμλ λλ€.
import java.util.Vector;
class Product {
int price;
int bonusPoint;
Product(int price) {
this.price = price;
bonusPoint = (int) (price / 10.0);
}
}
class Tv extends Product {
Tv() {
super(100);
}
public String toString() {
return "Tv";
}
}
class Computer extends Product {
Computer() {
super(200);
}
public String toString() {
return "Computer";
}
}
class Audio extends Product {
Audio() {
super(300);
}
public String toString() {
return "Audio";
}
}
class Buyer {
int money = 1000;
int bonusPoint = 0;
Vector item = new Vector();
int i = 0;
void buy(Product p) {
if (money < p.price) {
System.out.println("no money");
return;
}
money -= p.price;
bonusPoint += p.bonusPoint;
item.add(p);
System.out.println("you have purchased " + p);
}
void refund(Product p) {
if (item.remove(p)) {
money += p.price;
bonusPoint -= p.bonusPoint;
System.out.println("you have refunded " + p);
} else {
System.out.println("something wrong...");
}
}
void summary() {
int sum = 0;
String itemList = "";
if (item.isEmpty()) {
System.out.println("Something wrong...");
return;
}
for (int i = 0; i < item.size(); i++) {
Product p = (Product) item.get(i);
sum += p.price;
itemList += (i == 0) ? "" + p : ", " + p;
}
System.out.println("total price = $" + sum);
System.out.println("you have purchased " + itemList);
}
}
class source {
public static void main(String[] args) {
Buyer b = new Buyer();
Tv tv = new Tv();
Computer com = new Computer();
Audio audio = new Audio();
b.buy(tv);
b.buy(com);
b.buy(audio);
b.summary();
System.out.println();
b.refund(com);
b.summary();
}
}
References
http://www.yes24.com/Product/Goods/24259565
'π» Study ! > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[CH08] μμΈμ²λ¦¬(Exception handling) (0) | 2022.08.02 |
---|---|
[CH07] κ°μ²΄μ§ν₯νλ‘κ·Έλλ°4 (OOP) (0) | 2022.08.02 |
[CH07] κ°μ²΄μ§ν₯νλ‘κ·Έλλ°2 (OOP) (0) | 2022.07.31 |
[CH06] κ°μ²΄μ§ν₯νλ‘κ·Έλλ°1 (OOP) (0) | 2022.07.07 |
[CH05] λ°°μ΄ (0) | 2022.07.06 |