κΈ°μ‘΄ ν΄λμ€λ₯Ό νμ₯νμ¬ μλ‘μ΄ λ΄μ©μ λ§λΆμ΄κ±°λ λ΄μ©μ μΌλΆλ₯Ό λ°κΏ μ¬μ μνμ¬ μ¬μ©νλ κ².
extends
ν€μλλ‘ μμλ°μ μ μλ€.
extends
ν€μλλ‘ λ¨μΌ μμextends
ν€μλλ‘ λ€μ€ μμimplements
ν€μλλ‘ λ€μ€ μμ & ꡬνμ₯μ : μ½λμ μ¬μ¬μ© (ζ -> λ λ€λ₯Έ ζ μ°½μ‘°), νμ₯μ©μ΄
λ¨μ : λμ κ²°ν©λ
ν΄λμ€μμ (ꡬνμμ)
Concreteν΄λμ€
μμ : μ¨μ ν ν΄λμ€ -> μ¬μ μ μ΅μ
Abstractν΄λμ€
μμ : λ―Έμμ± ν΄λμ€
1) μΆμν΄λμ€λ μ§μ newλ‘ κ°μ²΄ μμ±μ λͺ»νλ€.
2) λ°λμ νμ ν΄λμ€ μꡬ!
extends XXX (λ¨μΌμμ)
"μΌλ°ν"
μΈν°νμ΄μ€μμ (νμ€, μ½μ, spe, λ°©λ²)
μ¬μ©μ κ΄μ
: μ¬μ©λ°©λ², μ½μμ 곡μ κ΄μ
: ꡬνμ μ±
μimplements XXX,YYY (λ€μ€μμ)
"μ€ν"
μΆμλ©μλμ μμλ‘ μ΄λ£¨μ΄μ§ νΉλ³ν νμ
-> μ¬μ μ νμ
1. is a
: μμκ΄κ³ (μΌλ°ν)
2. has a
: μμ (μ°κ΄κ΄κ³ - μꡬμ )
3. use a
: μ¬μ© (μμ‘΄κ΄κ³ - μΌμμ )
λ
Όλ¦¬μ μ¬μ μ
μ μ 쑰건 : μμ
1. λ©μλ μ΄λ¦
2. 맀κ°λ³μ λͺ©λ‘
3. 리ν΄νμ
1 ~ 3κΉμ§λ κ°μμΌ ν¨
4. μ κ·Όμ§μ μ κ°κ±°λ λκ² (λμ΄μ§)
5. throws ꡬ문 μμΈ κ°κ±°λ νμνμ
μΌλ‘ or μλμ§κ±°λ (μ’μμ§)
ννκ° λ€μν μ±μ§ => λ€μν ννλ₯Ό κ°μ§ μ μλ€.
κ°μ²΄ λ€νμ±
: Typeλ€νμ±
λ©μλ λ€νμ±
: λ€μ€μ μ(μ€λ²λ‘λ©), μ¬μ μ(μ€λ²λΌμ΄λ©)
Object <- Employee <- Engineer
big ----------------- small
Engineer e1 = new Engineer();
Employee e2 = new Engineer();
Object e3 = new Engineer();
big >= small
μ = λ΄μ©λ¬Ό
컀νΌμ = 컀νΌ
ν
λΈλ¬(withλΉ¨λ) = 컀νΌ
μμ ννμ λ°λΌ 컀νΌλ§μλ λ°©μμ΄ κ²°μ λλ€.
μ¦, κ°μ²΄λ₯Ό μ΄λμ λ΄λλμ λ°λΌ κ°μ²΄μ μ¬μ©λ°©λ²μ΄ λ¬λΌμ§λ€.
λ§μ½ Objectμ a, Employeeμ b, Engineerμ cκ° μ μΈλμ΄ μλ€κ³ ν λ,
e3.a
e2.a, e2.b
e1.a, e1.b, e1.c μ¬μ©κ°λ₯.
λ§μ½ Engineerμ Managerλ± λ€λ₯Έ μ§λ¬΄μ μ§μ μ΄ 100λͺ μ μλ¬λ¦¬λ₯Ό κ΄λ¦¬ν 리μ€νΈλ₯Ό μμ±ν λ μ¬μ©
Employee[] list = new Employee[100];
Engineerμ Managerλ± λ€μν μ§λ¬΄μ μ§μλ€μ 맀κ°λ³μλ‘ λ°μμΌ ν λ μ¬μ©
XXX(Employee e)
"μ§μλ€ λͺ¨μ΄μΈμ" -> "κ±°κΈ°μ μ§μλ€ κ³΅ν΅μ μΈ μ΄μΌκΈ°λ₯Ό ν΄μΌμ§, μμ§λμ΄ or 맀λμ μ΄μΌκΈ° νλ©΄ μλ¨"
κ²½μ°μ λ°λΌ 리ν΄νμ μ λ€λ₯΄κ² μ λ¬ν΄μΌ ν λ μ¬μ©
Employee XXX(){
if(...) return new Engineer();
else return new Manager();
}
λμ λ°μΈλ© (Run-time)
<-> μ μ λ°μΈλ© (Compile-time)
μ»΄νμΌμμ μ»΄νμΌλ¬κ° μΈμ§ν κ°μ²΄μ λ°νμμ μ€μ κ°μ²΄λ₯Ό λ€λ₯΄κ² μΈμ§
// Employeeμ μ μλ getInfo()λ₯Ό
// Engineerμμ getInfo()λ₯Ό μ€λ²λΌμ΄λ© νμ λ,
Employee e = new Engineer();
e.getInfo();
γ΄ Compile-time : Employee
γ΄ Run-time : Engineer
Employee e = new Engineer();μμ
eλ Engineerμ μλ λ©μλλ μ¬μ©νμ§ λͺ»νμ§λ§
μ μΌνκ² Engineerκ° μν₯μ μ£Όλκ²μ μ€λ²λΌμ΄λ©λ λ©μλμ΄λ€.
μμΈ μ²λ¦¬ ν€μλ 5κ°μ§ : try
catch
throw
throws
finally
μμΈ μ²λ¦¬λ, νλ‘κ·Έλ¨ μ€ν μ€ λ°μν μ μλ μκΈ°μΉ λͺ»ν μμΈ λ°μμ λλΉν μ½λλ₯Ό μμ±νλ κ²μ΄λ©°,
μμΈμ²λ¦¬μ λͺ©μ μ μμΈμ λ°μμΌλ‘ μΈν μ€νμ€μΈ νλ‘κ·Έλ¨μ κ°μμ€λ° λΉμ μ μ’
λ£λ₯Ό λ§κ³ μ€νμνλ₯Ό μ μ§ν μ μλλ‘ ν¨
μμΈλ₯Ό μ²λ¦¬νλ λ°©λ²μ ν¬κ² 3κ°μ§λ‘ λλ μ μλ€.
try - catch - finally
try ꡬ문μ μμΈκ° λ°μ ν κ°λ₯μ±μ΄ μλ λ²μλ₯Ό μ§μ νλ€.
try ꡬ문μλ μ΅μ νλ μ΄μμ catch κ΅¬λ¬Έμ΄ λ°λΌμ μμΉν΄μΌ νλ€.
finally ꡬ문μ μ νμ μΌλ‘ μ¬μ© κ°λ₯νλ©°, μμΈ λ°μ, catch μ 무μ μκ΄μμ΄ λ°λμ μνλλ€.
try{
// μμΈκ° λ°μν λ§ν μ½λ
}catch (Exception e) {
System.out.println(e.getMessage());
}finally{
System.out.println("μ’
λ£");
}
throws
throwsλ μ΄λ ν λ©μλμ λ΄λΆ μμ€μ½λμμ μλ¬κ° λ°μνμμ 1λ² λ°©λ²μ²λΌ μμΈλ₯Ό μ§μ μ²λ¦¬νλ κ²μ΄ μλλΌ,
μ΄ λ©μλλ₯Ό νΈμΆνλ κ³³μμ μ²λ¦¬λ₯Ό νλλ‘ μμΈ κ°μ²΄λ₯Ό μ λ¬ν¨.
public void throwMethod() throws Exception{
// μμΈκ° λ°μν λ§ν μ½λ
}
public static void main(String[] args) {
try{
throwMethod();
}catch (Exception e) {
System.out.println(e.getMessage());
}finally{
System.out.println("μ’
λ£");
}
}
throw
Exception ν΄λμ€λ₯Ό μμλ°λ μ¬μ©μ μ μ μμΈ ν΄λμ€λ₯Ό μμ±νμ¬ ν΄λΉ μμΈ κ°μ²΄λ₯Ό throwν μ μλ€.
3λ² λ°©λ²μ μμ 1λ² λ°©λ², 2λ² λ°©λ²μ λͺ¨λ μ μ©κ°λ₯νλ€.
public class CustomException extends Exception{
public CustomException(){
super("μ¬μ©μ μ μ μμΈ λ°μ!");
}
}
1λ² λ°©λ²μ²λΌ try - catchλ¬ΈμΌλ‘ μμΈκ° λ°μν λ©μλ λ΄μμ μ§μ μ²λ¦¬
try{
throw new CustomException();
}catch (CustomException e) {
System.out.println(e.getMessage());
}finally{
System.out.println("μ’
λ£");
}
2λ² λ°©λ²μ²λΌ ν΄λΉ λ©μλλ₯Ό νΈμΆν κ³³μΌλ‘ μμΈ κ°μ²΄λ₯Ό λ겨μ€
public void thorwMethod() throws CustomException{
if(μμΈ λ°μ 쑰건) throw new CustomException();
}
// μ μ ν μμΈμ²λ¦¬
try{
// μμΈκ° λ°μν λ§ν μ½λ
} catch (XXException e){
// μ²λ¦¬μ½λ
} catch (YYException e){
// μ²λ¦¬μ½λ
} catch (Exception e){
// μ²λ¦¬μ½λ
}
// μ μ νμ§ μμ μμΈμ²λ¦¬
try{
// μμΈκ° λ°μν λ§ν μ½λ
} catch (Exception e){
// μ²λ¦¬μ½λ
} catch (YYException e){
// μ²λ¦¬μ½λ
} catch (XXException e){
// μ²λ¦¬μ½λ
}
JVMμ΄ λμ§ μμΈλ catchλ¬Έμ₯μ μ°Ύμ λ λ€νμ±μ΄ μ μ©λ¨.
μμ νμ
μ μμΈκ° λ¨Όμ μ μΈλλ κ²½μ° λ€μ λ±μ₯νλ catchλ μ λ μ€νλμ§ μμ.
Unreachable catch block for Exception.
μμ κ΄κ³κ° μλ κ²½μ°λ 무κ΄νλ€.
μμ λ²μ(μμ)μμ ν° λ²μ(λΆλͺ¨)μμΌλ‘ catchλ¬Έμ μ μνλκ²μ΄ μ μ νκ² μμΈμ²λ¦¬νλ λ°©λ²μ.
class Parent {
void methodA() throws IOExeption{}
void methodB() throws ClassNotFoundException{}
}
class Child extends Parent {
@override
void methodA() throws FileNotFoundException{}
@override
void methodB() throws Exception{} // λ¬Έμ λ°μ!
}
μμμ΄ λΆλͺ¨μ λ©μλλ₯Ό μ€λ²λΌμ΄λ© ν λ, λΆλͺ¨ ν΄λμ€κ° λμ§λ μμΈλ³΄λ€ λ λΆλͺ¨μ μμΈλ₯Ό λμ§ μ μλ€!
(κ°κ±°λ νμνμ
μΌλ‘ or μλμ§κ±°λ (μ’μμ§))
μ¦, λΆλͺ¨Aκ° λμ§λ μ΄λ μμbκ° μλλ°, Aμ μμμΈ aκ° μ΄ bμ λΆλͺ¨μΈ Bλ₯Ό λμ§ μλ μλ€.
aλ b λλ bλ³΄λ€ λ μμ μμλΆν° λμ§ μ μμ.
FQCN(Fully Qualified Class Name)
λΌκ³ νλ€. ex) com.ssafy ν¨ν€μ§μ JavaTest ν΄λμ€λ₯Ό FQCNλ‘ νννλ©΄ com.ssafy.JavaTestκ° λ¨
import
ν€μλλ‘ ν¨ν€μ§λͺ
μ μ§μ import com.ssafy.*;
λΌκ³ μ μΈνλ©΄ λ¨package top.sub....;
// 물리μ : ν΄λ
// λ³΄ν΅ domain name(Unique!) μμμ¬μ©
import top.sub...ν΄λμ€μ΄λ¦;// μμ€ ν΄λμ€λͺ
λ°λ‘μ¬μ©
import top.sub...*;// all classes, interfaces
// (not package) : importλ¨μλ ν¨ν€μ§κ° μλ, ν΄λμ€ λ¨μ!
ν ν΄λμ€μμμ μ°Έμ‘°, μ¬μ©νλ ν΄λμ€κ° μμ κ³Ό κ°μ ν¨ν€μ§κ° μλ κ²½μ° λͺ
μ
λ¨, java.lang
μ μλμΌλ‘ λΆλ¬μ΄