μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Absolute
- AGI
- ai
- AI agents
- AI engineer
- AI researcher
- ajax
- algorithm
- Algorithms
- aliases
- Array κ°μ²΄
- ASI
- bayes' theorem
- Bit
- Blur
- BOM
- bootstrap
- canva
- challenges
- ChatGPT
- Today
- In Total
A Joyful AI Research Journeyπ³π
[34] 230215 Java Ch. 7 μμ: 1. μμ [K-λμ§νΈ νΈλ μ΄λ 34μΌ] λ³Έλ¬Έ
[34] 230215 Java Ch. 7 μμ: 1. μμ [K-λμ§νΈ νΈλ μ΄λ 34μΌ]
yjyuwisely 2023. 2. 15. 12:37230215 Wed 34th class
Ch. 7 μμ
μ§λ: p. 310 ~ (κ΅μ¬: νΌμ 곡λΆνλ μλ°, μ μ: μ μ©κΆ)
νλΉλ―Έλμ΄_νΌκ³΅μ_μ©μ΄μ§.pdf
μ©μ΄ μ°Έκ³
μ€λ λ°°μ΄ κ² μ€ κΈ°μ΅ν κ²μ μ 리νλ€.
μ§λ μμ λ λ°°μ΄ κ² μ€ λ€μ κΈ°μ΅ν κ²
public class A{
//νλ
public int a;
//μμ±μ
public A(){}
//λ©μλ
public void add(){}
(protected / default(μλ΅) / private)
}
- μ€λ²λ‘λ©: κ°μ μ΄λ¦μ λ©μλλ₯Ό μ¬λ¬ κ° κ°μ§λ©΄μ λ§€κ° λ³μλ₯Ό λ€λ₯΄κ² (κ°μ, νμ
) μ μνλ κ²
ν΄λΉλλ νμ
μ μΆκ°νλ κ²
μμκ³Ό κ΄λ ¨ μλ€.
2023.02.10 - [1. Revision 2023/Java] - [31] 230210 Ch. 6 ν΄λμ€(2): λ©μλ
- μ€λ²λΌμ΄λ©: μμ ν΄λμ€(λΆλͺ¨ ν΄λμ€)κ° κ°κ³ μλ λ©μλ(μμ ν΄λμ€)λ₯Ό νμ ν΄λμ€μμ μ¬μ μν΄ μ¬μ©νλ κ²
λ΄μ©μ μμ νλ€.
ν΄λμ€μλ κ°μ²΄κ° κ°μ ΈμΌ ν κ΅¬μ± λ©€λ²κ° μ μΈλλ€. κ΅¬μ± λ©€λ²μλ νλ, μμ±μ, λ©μλκ° μλ€. μ΄ κ΅¬μ± λ©€λ²λ€μ μλ΅λκ±°λ 볡μμ κ°μλ‘ μμ±λ μ μλ€.
νλ: κ°μ²΄μ λ°μ΄ν°κ° μ μ₯λλ κ³³
μμ±μ: κ°μ²΄ μμ± μ μ΄κΈ°ν(initialze: λ³μμ μ΄κΈ°κ°μ μ£Όλ νμ) μν λ΄λΉ
λ©μλ: κ°μ²΄μ λμμ ν΄λΉνλ μ€ν λΈλ‘
public class ClassName{
//νλ
int fieldname;
//μμ±μ
ClassName(){...}
//λ©μλ
void methodName(){...}
}
μΈμ€ν΄μ€: ν΄λμ€λ‘λΆν° λ§λ€μ΄μ§ κ°μ²΄
μΈμ€ν΄μ€ν: ν΄λμ€λ‘λΆν° κ°μ²΄λ₯Ό λ§λλ κ³Όμ
κ°λ°μ → [μ€κ³] → ν΄λμ€(μ€κ³λ) → [μΈμ€ν΄μ€ν] → μΈμ€ν΄μ€(κ°μ²΄)
'this.νλ'λ thisλΌλ μ°Έμ‘° λ³μλ‘ νλλ₯Ό μ¬μ©νλ κ²κ³Ό λμΌνλ€.
this μ°Έμ‘° λ³μ
this μ°Έμ‘° λ³μλ μΈμ€ν΄μ€κ° λ°λ‘ μκΈ° μμ μ μ°Έμ‘°νλ λ° μ¬μ©νλ λ³μμ
λλ€.
μ΄λ¬ν this μ°Έμ‘° λ³μλ ν΄λΉ μΈμ€ν΄μ€μ μ£Όμλ₯Ό κ°λ¦¬ν€κ³ μμ΅λλ€.
μ°Έκ³ : http://www.tcpschool.com/java/java_methodConstructor_this
- λ©μλ μμ(Method Area)μλ μ μ νλ, μμ, λ©μλ μ½λ, μμ±μ μ½λκ° μμΉνλ©°, (곡μ ν΄μ μ¬μ©νλ€.)
- ν μμ(Heap Area)μλ κ°μ²΄κ° μμ±λλ€.
- μ€ν μμ(Stack)μλ λ³μκ° μμ±λλ€.
μ κ·Ό μ νμ
public: μ κ·Ό μ νμ΄ μλ€.
protected: κ°μ ν¨ν€μ§μ μλ ν΄λμ€λ μ κ·Ό κ°λ₯, λ€λ₯Έ ν¨ν€μ§μ μλ ν΄λμ€λ μ κ·Ό λΆκ°λ₯
* μμμ νλ©΄ λ€λ₯Έ ν¨ν€μ§μ μλ ν΄λμ€λ μ κ·Ό κ°λ₯ *
(default): κ°μ ν¨ν€μ§μ μλ ν΄λμ€λ μ κ·Ό κ°λ₯, λ€λ₯Έ ν¨ν€μ§μ μλ ν΄λμ€λ μ κ·Ό λΆκ°λ₯
* μμμ ν΄λ λ€λ₯Έ ν¨ν€μ§μ μλ ν΄λμ€ μ κ·Ό λΆκ°λ₯ *
private: μΈλΆμμ μ κ·Όμ΄ λΆκ°λ₯(κ°μ ν΄λμ€ λ΄μμλ§ μ κ·Ό)
쑰건문:
int a = 10;
if(a > 20){
System.out.println("aκ° 20λ³΄λ€ ν½λλ€.")
}
int a = 30;
if(a > 20){
System.out.println("aκ° 20λ³΄λ€ ν½λλ€.")
}
Ch. 7 μμ
μ± μ λͺ©μ°¨
07-1 μμ
07-2 νμ λ³νκ³Ό λ€νμ±
07-3 μΆμ ν΄λμ€
7.1 μμ (inheritance)
νμ€μμ μμ(inheritance)μ λΆλͺ¨κ° μμμμ λ¬Όλ €μ£Όλ νμλ₯Ό λ§νλ€. μμμ μμμ ν΅ν΄μ λΆλͺ¨κ° λ¬Όλ €μ€ κ²μ μμ°μ€λ½κ² μ΄μ©ν μ μλ€.
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμλ λΆλͺ¨ ν΄λμ€μ λ©€λ²λ₯Ό μμ ν΄λμ€μκ² λ¬Όλ €μ€ μ μλ€.
νλ‘κ·Έλ¨μμλ λΆλͺ¨ ν΄λμ€λ₯Ό μμ ν΄λμ€λΌκ³ λΆλ₯΄κ³ , μμ ν΄λμ€λ₯Ό νμ / νμ ν΄λμ€λΌκ³ λΆλ₯Έλ€.
μ€λ³΅ μ½λλ₯Ό μ΅μννλ €κ³ μμμ μ΄λ€.
μμμ μ΄μ©νλ©΄ λΆλͺ¨ ν΄λμ€μ μμ μΌλ‘ λͺ¨λ μμ ν΄λμ€λ€λ μμ λλ ν¨κ³Όλ₯Ό κ°μ Έμ€κΈ° λλ¬Έμ μ μ§ λ³΄μ μκ°μ μ΅μνν μ μλ€.
νλ, λ©μλλ μμνλ λ° μμ±μλ μμ X
7.1.1 ν΄λμ€ μμ p. 311
νμ€μμ μμμ λΆλͺ¨κ° μμμ μ νν΄μ λ¬Όλ €μ£Όμ§λ§, νλ‘κ·Έλ¨μμλ μμμ΄ λΆλͺ¨λ₯Ό μ ννλ€.
μμ ν΄λμ€λ₯Ό μ μΈν λ μ΄λ€ λΆλͺ¨ ν΄λμ€λ₯Ό μμλ°μ κ²μΈμ§ κ²°μ νκ³ , μ νλ λΆλͺ¨ ν΄λμ€λ extends λ€μ κΈ°μ νλ€.
class μμν΄λμ€ extends λΆλͺ¨ν΄λμ€{
//νλ
//μμ±μ
//λ©μλ
}
λ€μμ Car ν΄λμ€λ₯Ό μμν΄μ SportsCar ν΄λμ€λ₯Ό μ€κ³νλ€.
class SportsCar extends Car{
}
μλ°μμ μμμ νΉμ§
1) μ¬λ¬ κ°μ λΆλͺ¨ ν΄λμ€λ₯Ό μμν μ μλ€. extends λ€μλ λ¨ νλμ λΆλͺ¨ ν΄λμ€λ§ μμΌ νλ€.
2) λΆλͺ¨ ν΄λμ€μμ private μ κ·Ό μ νμ κ°λ νλμ λ©μλλ μμ λμμμ μ μΈλλ€.
λΆλͺ¨ ν΄λμ€μ μμ ν΄λμ€κ° λ€λ₯Έ ν¨ν€μ§μ μ‘΄μ¬νλ€λ©΄ default μ κ·Ό μ νμ κ°λ νλμ λ©μλλ μμ λμμμ μ μΈλλ€.
νΈλν°(CellPhone) ν΄λμ€λ₯Ό μμν΄μ DMB(DmbCellPhone) ν΄λμ€λ₯Ό μμν κ²μΌλ‘, νΈλν°μ΄ λΆλͺ¨ ν΄λμ€κ° λκ³ DMBν°μ΄ μμ ν΄λμ€κ° λλ€.
μμ 1) λΆλͺ¨ ν΄λμ€
package ch07;
//ν΅νλ§ κ°λ₯ν ν°
public class CellPhone {
//νλ (μΈμ€ν΄μ€ νλ)
//λͺ¨λΈ
String model;
//μμ
String color;
//μμ±μ
/* CellPhone(String model, String color){
this.model=model;
this.color=color;
}*/
//λ©μλ
//μ μμ μΌ λ€.
void powerOn() {System.out.println("μ μμ μΌλλ€.");}
//μ μμ λλ€.
void powerOff() {System.out.println("μ μμ λλλ€.");}
//벨μ μΈλ¦°λ€.
void bell() {System.out.println("μ μμ μΌλλ€.");}
//λ©μμ§λ₯Ό μ‘μ νλ€.
void sendVoice(String message) {System.out.println("μκΈ°: " + message);}
//λ©μμ§λ₯Ό μμ νλ€.
void receiveVoice(String message) {System.out.println("μλλ°©: " + message);}
//μ νλ₯Ό λλλ€.
void hangUp() {System.out.println("μ νλ₯Ό λμ΅λλ€");}
}
μμ 2) μμ ν΄λμ€
μμ 2μ μμ±μ μ μΈκ³Ό
μμ 3μ DmbCellPhone dmbCellPhone = new DmbCellPhone("μλ°ν°","κ²μ ",10); 체ν¬ν΄ λ³Έλ€.
package ch07;
//ν΅ν+dmbκΈ°λ₯κΉμ§ μ₯μ°©ν ν°
public class DmbCellPhone extends CellPhone {
//μμ(νμ) extends λΆλͺ¨(μμ)
//νλ
//λͺ¨λΈ(CellPhoneν΄λμ€μμ μμλ°μμΌλ―λ‘ λ°λ‘ μ μΈ μ ν¨.)
//μμ(CellPhoneν΄λμ€μμ μμλ°μμΌλ―λ‘ λ°λ‘ μ μΈ μ ν¨.)
//μ±λ
int channel;
//μμ±μ(λ§€κ° λ³μκ° 3κ°μΈ μμ±μ) μ μΈ
DmbCellPhone(String model, String color, int channel){
this.model = model;
this.color = color;
this.channel = channel;
}
//λ©μλ
//dmb κ΄λ ¨ κΈ°λ₯
void turnOnDmb() {
System.out.println("μ±λ "+channel+"λ² DMB λ°©μ‘ μμ μ μμν©λλ€.");
}
void changeChannelDmb(int channel) {
this.channel = channel;
System.out.println("μ±λ "+channel+"λ²μΌλ‘ λ°κΏλλ€.");
}
void turnOffDmb() {
System.out.println("DMB λ°©μ‘ μμ μ λ©μΆ₯λλ€.");
}
}
μμ 3) μμ ν΄λμ€ μ¬μ©
package ch07;
public class DmbCellPhoneExample {
public static void main(String[] args) {
//DmbCellPhone κ°μ²΄ μμ±
//CellPhone cp = new CellPhone();
DmbCellPhone dmbCellPhone = new DmbCellPhone("μλ°ν°","κ²μ ",10);
//CellPhone ν΄λμ€λ‘λΆν° μμλ°μ νλ
System.out.println("λͺ¨λΈ: " + dmbCellPhone.model);
System.out.println("μμ: " + dmbCellPhone.color);
//DmbCellPhone ν΄λμ€μ νλ
System.out.println("μ±λ: " + dmbCellPhone.channel);
//CellPhone ν΄λμ€λ‘λΆν° μμλ°μ λ©μλ νΈμΆ
dmbCellPhone.powerOn();
dmbCellPhone.powerOff();
dmbCellPhone.sendVoice("μ¬λ³΄μΈμ");
dmbCellPhone.receiveVoice("μλ
νμΈμ! μ λ νκΈΈλμΈλ°μ.");
dmbCellPhone.sendVoice("μ~ μ λ°κ°μ΅λλ€.");
dmbCellPhone.hangUp();
//DmbCellPhone ν΄λμ€μ λ©μλ νΈμΆ
dmbCellPhone.turnOnDmb();
dmbCellPhone.changeChannelDmb(12);
dmbCellPhone.turnOffDmb();
}
}
7.1.2 λΆλͺ¨ μμ±μ νΈμΆ (super)
super: λΆλͺ¨ν΄λμ€ μμ±μ νΈμΆ
μμν΄λμ€μ λͺ¨λ μμ±μμ λΆλͺ¨ ν΄λμ€μ κΈ°λ³Έ μμ±μλ₯Ό νΈμΆνλ super()κ° μλ΅λμ΄ μλ€.
맀κ°λ³μ μ λ ₯ μ, κ·Έμ λ§λ λΆλͺ¨ ν΄λμ€ μμ±μ νΈμΆνλ€.
맀κ°λ³μ λ―Έμ λ ₯ λλ super() μλ΅ μ, λΆλͺ¨ ν΄λμ€ κΈ°λ³Έ μμ±μ νΈμΆνλ€.
μ°Έκ³ : https://pathas.tistory.com/134
μλ°μμ μμ κ°μ²΄λ₯Ό μμ±νλ©΄, λΆλͺ¨ κ°μ²΄κ° λ¨Όμ μμ±λκ³ κ·Έλ€μμ μμ κ°μ²΄κ° μμ±λλ€.
DmbCellPhone κ°μ²΄λ§ μμ±νλ κ²μ²λΌ 보μ΄μ§λ§, μ¬μ€μ λ΄λΆμ μΌλ‘ λΆλͺ¨μΈ CellPhone κ°μ²΄κ° λ¨Όμ μμ±λκ³ μμμΈ DmbCellPhonerκ°μ²΄κ° μμ±λλ€.
DmbCellPhone dmbCellPhone = new DmbCellPhone();
DmbCellPhoneμ μμ±μκ° λͺ μμ μΌλ‘ μ μΈλμ§ μμλ€λ©΄ μ»΄νμΌλ¬λ κΈ°λ³Έ μμ±μλ₯Ό μμ±νλ€.
public DmbCellPhone{
super();
}
super()μ λΆλͺ¨μ κΈ°λ³Έ μμ±μλ₯Ό νΈμΆνλ€. μ¦ CellPhone ν΄λμ€μ λ€μ μμ±μλ₯Ό νΈμΆνλ€.
CellPhoneμ μμ±μκ° μ μΈλμ§ μμμ§λ§ μ»΄νμΌλ¬μ μν΄ κΈ°λ³Έ μμ±μκ° λ§λ€μ΄μ§λ―λ‘ λ¬Έμ μμ΄ μ€νλλ€.
public CellPhone{
}
μ§μ μμ μμ±μλ₯Ό μ μΈνκ³ λͺ
μμ μΌλ‘ λΆλͺ¨ μμ±μλ₯Ό νΈμΆνκ³ μΆλ€λ©΄ λ€μκ³Ό κ°μ΄ μμ±νλ€.
μμν΄λμ€(맀κ°λ³μμ μΈ, ...){
super(맀κ°κ°, ...);
...
}
super(맀κ°κ°, ...): 맀κ°κ°μ νμ
κ³Ό μΌμΉνλ λΆλͺ¨ μμ±μλ₯Ό νΈμΆνλ€.
λΆλͺ¨ ν΄λμ€μ κΈ°λ³Έ μμ±μκ° μκ³ λ§€κ° λ³μκ° μλ μμ±μκ° μλ€λ©΄ μμ μμ±μμμ λ°λμ λΆλͺ¨ μμ±μ νΈμΆμ μν΄ super(맀κ°κ°, ...)μ λͺ
μμ μΌλ‘ νΈμΆν΄μΌ νλ€.
super(맀κ°κ°,...)λ λ°λμ μμ μμ±μ 첫 μ€μ μμΉν΄μΌ νλ€.
μμ 1) λΆλͺ¨ ν΄λμ€
package ch07;
public class People {
//νλ
//μ΄λ¦
public String name;
//μ£Όλ―Όλ²νΈ
public String ssn;
//μμ±μ
//맀κ°λ³μκ° 2κ°μΈ μμ±μ μ μΈ
public People(String name, String ssn) {
this.name = name;
this.ssn = ssn;
}
//λ©μλ
}
μμ 2) μμ ν΄λμ€
package ch07;
public class Student extends People {
//νλ
//νμλ²νΈ
public int studentNo;
public Student(String name, String ssn, int studentNo) {
super(name, ssn);
this.studentNo = studentNo;
}
}
μμ 3) μμ κ°μ²΄ μ΄μ©
package ch07;
public class StudentExample {
public static void main(String[] args) {
Student student = new Student("νκΈΈλ", "123456-1234567", 1);
System.out.println("name: "+student.name);
System.out.println("ssn: "+student.ssn);
System.out.println("studentNo: "+student.studentNo);
}
}
κ²°κ³Ό)
name: νκΈΈλ
ssn: 123456-1234567
studentNo: 1
7.1.3 λ©μλ μ¬μ μ (Overriding μ€λ²λΌμ΄λ©)
λΆλͺ¨ ν΄λμ€μ λͺ¨λ λ©μλκ° μμ ν΄λμ€μ λ§κ² μ¬μ©ν μ μλ€λ©΄ κ°μ₯ μ΄μμ μΈ μμμ΄μ§λ§, μ΄λ€ λ©μλλ μμ ν΄λμ€κ° μ¬μ©νκΈ°μ μ ν©νμ§ μμ μλ μλ€.
μμλ μΌλΆ λ©μλλ μμ ν΄λμ€μμ λ€μ μμ ν΄μ μ¬μ©ν΄μΌ νλ€.
λ©μλ μ€λ²λΌμ΄λ©(method overriding)
μμ λ°°μ΄ μ€λ²λ‘λ©(overloading)μ΄λ μλ‘ λ€λ₯Έ μκ·Έλμ²λ₯Ό κ°λ μ¬λ¬ λ©μλλ₯Ό νλμ μ΄λ¦μΌλ‘ μ μνλ κ²μ΄μμ΅λλ€.
μ€λ²λΌμ΄λ©(overriding)μ΄λ μμ κ΄κ³μ μλ λΆλͺ¨ ν΄λμ€μμ μ΄λ―Έ μ μλ λ©μλλ₯Ό μμ ν΄λμ€μμ κ°μ μκ·Έλμ³λ₯Ό κ°λ λ©μλλ‘ λ€μ μ μνλ κ²μ΄λΌκ³ ν μ μμ΅λλ€.
μλ°μμ μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€μ private λ©€λ²λ₯Ό μ μΈν λͺ¨λ λ©μλλ₯Ό μμλ°μ΅λλ€.
μ΄λ κ² μμλ°μ λ©μλλ κ·Έλλ‘ μ¬μ©ν΄λ λκ³ , νμν λμμ μν΄ μ¬μ μνμ¬ μ¬μ©ν μλ μμ΅λλ€.
μ¦, λ©μλ μ€λ²λΌμ΄λ©μ΄λ μμλ°μ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μνμ¬ μ¬μ©νλ κ²μ μλ―Έν©λλ€.
1) λ©μλ μ¬μ μ λ°©λ²
λ©μλ μ¬μ μ: μμ ν΄λμ€μμ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό λ€μ μ μνλ κ²
κ·μΉ
- λΆλͺ¨μ λ©μλμ λμΌν μκ·Έλμ²(λ¦¬ν΄ νμ
, λ©μλ μ΄λ¦, λ§€κ° λ³μ λͺ©λ‘)λ₯Ό κ°μ ΈμΌ νλ€.
- μ κ·Ό μ νμ λ κ°νκ² (↓(X)) μ¬μ μν μ μλ€. (public → default X, private X) (defualt → default O, public O)
ex) λΆλͺ¨ λ©μλκ° public μ κ·Ό μ νμ κ°μ§κ³ μμ κ²½μ° μ¬μ μνλ μμ λ©μλλ defaultλ private μ κ·Ό μ νμΌλ‘ μμ ν μ μλ€.
ex) λΆλͺ¨ λ©μλκ° default μ κ·Ό μ νμ κ°μ§λ©΄ μμ λ©μλλ default λλ public μ κ·Ό μ νμ κ°μ§ μ μλ€.
- μλ‘μ΄ μμΈ(Exception)λ₯Ό throwsν μ μλ€. (Ch10μμ νμ΅)
μλ°μμ λ©μλλ₯Ό μ€λ²λΌμ΄λ©νκΈ° μν 쑰건μ λ€μκ³Ό κ°μ΅λλ€.
1. μ€λ²λΌμ΄λ©μ΄λ λ©μλμ λμλ§μ μ¬μ μνλ κ²μ΄λ―λ‘, λ©μλμ μ μΈλΆλ κΈ°μ‘΄ λ©μλμ μμ ν κ°μμΌ ν©λλ€. νμ§λ§ λ©μλμ λ°ν νμ μ λΆλͺ¨ ν΄λμ€μ λ°ν νμ μΌλ‘ νμ λ³νν μ μλ νμ μ΄λΌλ©΄ λ³κ²½ν μ μμ΅λλ€.
2. λΆλͺ¨ ν΄λμ€μ λ©μλλ³΄λ€ μ κ·Ό μ μ΄μλ₯Ό λ μ’μ λ²μλ‘ λ³κ²½ν μ μμ΅λλ€
3. λΆλͺ¨ ν΄λμ€μ λ©μλλ³΄λ€ λ ν° λ²μμ μμΈλ₯Ό μ μΈν μ μμ΅λλ€.
μμ 1) λΆλͺ¨ ν΄λμ€
package ch07;
public class Calculator {
//μ κ·Όμ νμ: default
double areaCircle(double r) {
System.out.println("Calculator κ°μ²΄μ areaCircle() μ€ν");
return 3.14159 * r * r;
}
}
μμ 2) μμ ν΄λμ€
package ch07;
public class Computer extends Calculator {
@Override //μ΄μ λ²μ μ λΆμΈλ€.
//μ κ·Όμ νμ: default
double areaCircle(double r) {
System.out.println("Computer κ°μ²΄μ areaCircle() μ€ν"); //μ¬μ μ
return Math.PI * r * r;
}
}
μμ 3) λ©μλ μ¬μ μ ν μ€νΈ
μΈμ€ν΄μ€ν: ν΄λμ€λ‘λΆν° κ°μ²΄λ₯Ό λ§λλ κ³Όμ
package ch07;
public class ComputerExample {
public static void main(String[] args) {
int r = 10;
//Calculator ν΄λμ€λ₯Ό μΈμ€ν΄μ€νν΄μ κ°μ²΄ μμ±(λΆλͺ¨ ν΄λμ€ κ°μ²΄ μμ±)
Calculator calculator = new Calculator();
System.out.println("μλ©΄μ : " + calculator.areaCircle(r));
System.out.println();
//Computer ν΄λμ€λ₯Ό μΈμ€ν΄μ€νν΄μ κ°μ²΄ μμ±(μμ ν΄λμ€ κ°μ²΄ μμ±)
Computer computer = new Computer();
System.out.println("μλ©΄μ : " + computer.areaCircle(r)); //μ¬μ μλ λ©μλ νΈμΆ
}
}
κ²°κ³Ό)
Calculator κ°μ²΄μ areaCircle() μ€ν
μλ©΄μ : 314.159
Computer κ°μ²΄μ areaCircle() μ€ν
μλ©΄μ : 314.1592653589793
2) λΆλͺ¨ λ©μλ νΈμΆ p. 319
μμ ν΄λμ€μμ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μνκ² λλ©΄ λΆλͺ¨ ν΄λμ€μ λ©μλλ μ¨κ²¨μ§κ³ μ¬μ μλ μμ λ©μλλ§ μ¬μ©νκ² λλ€. μμ ν΄λμ€ λ΄λΆμμ μ¬μ μλ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό νΈμΆν΄μΌ νλ μν©μ΄ λ°μνλ€λ©΄ λͺ
μμ μΌλ‘ super ν€μλλ₯Ό λΆμ¬μ λΆλͺ¨ λ©μλλ₯Ό νΈμΆν μ μλ€.
super.λΆλͺ¨λ©μλ();
Airplane ν΄λμ€λ₯Ό μμν΄μ SupersonicAirplane ν΄λμ€λ₯Ό λ§λ€μ΄λ³Έλ€. Airplane fly() λ©μλλ μΌλ° λΉνμ΄μ§λ§ SupersonicAirplaneμ fly() λ©μλλ μ΄μμ λΉν λͺ¨λμ μΌλ° λΉν λͺ¨λ λ κ°μ§λ‘ λμνλ€.
μμ 1) super λ³μ Airplane.java
package ch07;
public class Airplane {
//μΈμ€ν΄μ€ λ©μλ μ μΈ
public void land() {
System.out.println("μ°©λ₯ν©λλ€.");
}
public void fly() {
System.out.println("μΌλ°λΉνν©λλ€.");
}
public void takeOff() {
System.out.println("μ΄λ₯ν©λλ€.");
}
}
μμ 2) super λ³μ SupersonicAirplane.java
final: λ³κ²½ν μ μλ
package ch07;
//μμ ν΄λμ€
public class SupersonicAirplane extends Airplane {
//μμ(ν λ² μ μ₯ν κ°μ λ³κ²½ν μ μλ€.)
public static final int NORMAL = 1;
//μμ(ν λ² μ μ₯ν κ°μ λ³κ²½ν μ μλ€.)
public static final int SUPERSONIC = 2; //static: μ μ νλ
//λ³μ
public int flyMode = NORMAL;
//μΈμ€ν΄μ€ λ©μλ μ μΈ
public void fly() {
if(flyMode == SUPERSONIC) {
System.out.println("μ΄μμλΉνν©λλ€.");
}else {
//μΈμν΄μ€ λ©μλ νΈμΆ: Airplane(λΆλͺ¨) κ°μ²΄μ fly()λ©μλ νΈμΆ
super.fly(); //super. μ λΆλͺ¨ ν΄λμ€λ₯Ό νΈμΆ
}
}
}
μμ 3) super λ³μ SupersonicAirPlaneExample.java
package ch07;
public class SupersonicAirplaneExample {
public static void main(String[] args) {
SupersonicAirplane sa = new SupersonicAirplane();
sa.takeOff(); //"μ΄λ₯ν©λλ€."
sa.fly(); //"μΌλ°λΉνν©λλ€."
sa.flyMode = SupersonicAirplane.SUPERSONIC; //ν΄λμ€μ΄λ¦ (μ μ static) 2 == 2
sa.fly(); //"μ΄μμλΉνν©λλ€."
sa.flyMode = SupersonicAirplane.NORMAL; // 1 =/= 2
sa.fly(); //"μΌλ°λΉνν©λλ€."
sa.land(); //"μ°©λ₯ν©λλ€."
}
}
κ²°κ³Ό)
μ΄λ₯ν©λλ€.
μΌλ°λΉνν©λλ€.
μ΄μμλΉνν©λλ€.
μΌλ°λΉνν©λλ€.
μ°©λ₯ν©λλ€.
7.1.4 final ν΄λμ€μ final λ©μλ p. 322
final ν€μλλ ν΄λμ€, νλ λ©μλλ₯Ό μ μΈν λ μ¬μ©ν μ μλλ°, ν΄λΉ μ μΈμ΄ μ΅μ’
μνμ΄κ³ κ²°μ½ μμ λ μ μμμ λ»νλ€.
final ν€μλλ ν΄λμ€, νλ, λ©μλ μ μΈμ μ¬μ©λ κ²½μ° ν΄μμ΄ μ‘°κΈμ© λ¬λΌμ§λλ°,
νλλ₯Ό μ μΈν λ (Ch6 μ°Έκ³ ) finalμ΄ μ§μ λλ©΄ μ΄κΈ°κ° μ€μ ν λ μ΄μ κ°μ λ³κ²½ν μ μλ€. = μμκ° λλ€.
ν΄λμ€μ λ©μλλ₯Ό μ μΈν λ final ν€μλκ° μ§μ λλ©΄ μμκ³Ό κ΄λ ¨μ΄ μλ€λ μλ―Έμ΄λ€.
1) μμν μ μλ final ν΄λμ€
ν΄λμ€λ₯Ό μ μΈν λ final ν€μλλ₯Ό class μμ λΆμ΄λ©΄ μ΄ ν΄λμ€λ μ΅μ’
μ μΈ ν΄λμ€μ΄λ―λ‘ μμν μ μλ ν΄λμ€κ° λλ€.
μ¦, final ν΄λμ€λ λΆλͺ¨ ν΄λμ€κ° λ μ μμ΄ μμ ν΄λμ€λ₯Ό λ§λ€ μ μλ€λ κ²μ΄λ€.
public final class ν΄λμ€ {...}
//final ν΄λμ€μ λνμ μΈ μ: μλ° νμ€ APIμμ μ 곡νλ String ν΄λμ€
public final class String
//public class NewString extends String{...} //μ λλ€.
2) μ¬μ μν μ μλ final λ©μλ
λ©μλλ₯Ό μ μΈν λ final ν€μλλ₯Ό λΆμ΄λ©΄ μ΄ λ©μλλ μ΅μ’
μ μΈ λ©μλμ΄λ―λ‘ μ¬μ μν μ μλ λ©μλκ° λλ€.
μ¦, λΆλͺ¨ ν΄λμ€μμ μμν΄μ μμ ν΄λμ€λ₯Ό μ μΈν λ λΆλͺ¨ ν΄λμ€κ° μ μΈλ final λ©μλλ μμ ν΄λμ€μμ μ¬μ μ ν μ μλ€.
μμ 1) μ¬μ μν μ μλ final λ©μλ Car.java
package ch07;
public class Car {
//νλ
public int speed;
//μμ±μ
//λ©μλ
//speedλ₯Ό 1μ© μ¦κ°
public void speedUp() {speed += 1;}
//final λ©μλ
public final void stop() {
System.out.println("μ°¨λ₯Ό λ©μΆ€");
speed = 0;
}
}
μμ 2) μ¬μ μν μ μλ fianl λ©μλ SportsCar.java
package ch07;
public class SportCar extends Car{
//speedλ₯Ό 10μ© μ¦κ°(λΆλͺ¨ ν΄λμ€μ speedUpλ©μλμ λ΄μ© λ³κ²½: μ€λ²λΌμ΄λ©)
public void speedUp() {speed += 10;}
//μ°¨λ₯Ό λ©μΆ€ μΆλ ₯
public void stop() {
System.out.println("μ€ν¬μΈ μΉ΄λ₯Ό λ©μΆ€");
speed = 0;
}
}
protected μ κ·Ό μ νμ p. 325
protected μ κ·Ό μ νμ: κ°μ ν¨ν€μ§ λλ μμ ν΄λμ€μμ μ¬μ©ν μ μλλ‘ νλ€.
κ°μ ν¨ν€μ§μ μνλ ν΄λμ€μμ μμ±μ νΈμΆ κ°λ₯νλ€. λ€λ₯Έ ν¨ν€μ§μ μν ν΄λμ€κ° ν΄λΉ μμ ν΄λμ€λΌλ©΄ μμ±μλ₯Ό νΈμΆν μ μλ€.
μμ O
protectedλ κ°μ ν¨ν€μ§μμ defaultμ κ°μ΄ μ κ·Ό μ νμ΄ μμ§λ§ λ€λ₯Έ ν¨ν€μ§μμλ μμ ν΄λμ€λ§ μ κ·Όμ νμ©νλ€.
μμ 1) protected μ κ·Ό μ νμ
package ch07.pack1;
public class A {
String field1; //μ κ·Ό μ νμ: default
protected String field2; //μ κ·Ό μ νμ: protected
protected A() {}
void method1() {} //μ κ·Ό μ νμ: default
protected void method2() {} //μ κ·Ό μ νμ: protected
}
μμ 2) protected μ κ·Ό μ νμ ν
μ€νΈ
λμΌ ν¨ν€μ§: A ν΄λμ€μ proteced νλ, μμ±μ, λ©μλμ μ κ·Ό κ°λ₯
package ch07.pack1;
public class B {
public void method() {
A a = new A();
//κ°μ ν¨ν€μ§(ch07.pack1)μμ default μ κ·Όμ νμ μ κ·Ό κ°λ₯
a.field1 = "value1"; //μ κ·Ό κ°λ₯
//κ°μ ν¨ν€μ§(ch07.pack1)μμ protected μ κ·Όμ νμ μ κ·Ό κ°λ₯
a.field2 = "value1"; //μ κ·Ό κ°λ₯
//κ°μ ν¨ν€μ§(ch07.pack1)μμ protected μ κ·Όμ νμ μ κ·Ό κ°λ₯
a.method1();
//κ°μ ν¨ν€μ§(ch07.pack1)μμ protected μ κ·Όμ νμ μ κ·Ό κ°λ₯
a.method2();
}
}
μμ 3) protected μ κ·Ό μ νμ ν
μ€νΈ
λ€λ₯Έ ν¨ν€μ§: A ν΄λμ€μ proteced νλ, μμ±μ, λ©μλμ μ κ·Ό λΆκ°λ₯
package ch07.pack2;
import ch07.pack1.A;
public class C {
public void method() {
A a = new A(); //μ κ·Ό λΆκ°λ₯
//κ°μ ν¨ν€μ§(ch07.pack1)μμ default μ κ·Όμ νμ μ κ·Ό λΆκ°λ₯
a.field1 = "value1";
//κ°μ ν¨ν€μ§(ch07.pack1)μμ protected μ κ·Όμ νμ μ κ·Ό λΆκ°λ₯
a.field2 = "value1";
//κ°μ ν¨ν€μ§(ch07.pack1)μμ protected μ κ·Όμ νμ μ κ·Ό λΆκ°λ₯
a.method1();
//κ°μ ν¨ν€μ§(ch07.pack1)μμ protected μ κ·Όμ νμ μ κ·Ό λΆκ°λ₯
a.method2();
}
}
μμ 4) protected μ κ·Ό μ νμ
λ€λ₯Έ ν¨ν€μ§ + μμ ν΄λμ€: A ν΄λμ€μ proteced νλ, μμ±μ, λ©μλμ μ κ·Ό κ°λ₯
λ¨ new μ°μ°μλ₯Ό μ¬μ©ν΄μ μμ±μλ₯Ό μ§μ νΈμΆν μλ μκ³ , μμ μμ±μμμ super()λ‘ A μμ±μλ₯Ό νΈμΆν μ μλ€.
package ch07.pack2;
import ch07.pack1.A;
public class D extends A {
public D() {
super();
//κ°μ ν¨ν€μ§(ch07.pack1)μμ default μ κ·Όμ νμ μ κ·Ό λΆκ°λ₯
field1 = "value1";
//κ°μ ν¨ν€μ§(ch07.pack1)μμ protected μ κ·Όμ νμ μ κ·Ό κ°λ₯
field2 = "value1";
//κ°μ ν¨ν€μ§(ch07.pack1)μμ protected μ κ·Όμ νμ μ κ·Ό λΆκ°λ₯
method1();
//κ°μ ν¨ν€μ§(ch07.pack1)μμ protected μ κ·Όμ νμ μ κ·Ό κ°λ₯
method2();
}
}
λ§λ¬΄λ¦¬ p. 328
4κ°μ§ ν€μλλ‘ λλ΄λ ν΅μ¬ ν¬μΈνΈ
1) μμ: λΆλͺ¨ ν΄λμ€μ νλμ λ©μλλ₯Ό μμ ν΄λμ€μμ μ¬μ©ν μ μλλ‘ νλ€.
2) λ©μλ μ¬μ μ: λΆλͺ¨ λ©μλλ₯Ό μμ ν΄λμ€μμ λ€μ μ μνλ κ²μ λ§νλ€.
3) final ν΄λμ€: final ν€μλλ‘ μ μΈλ ν΄λμ€λ λΆλͺ¨ ν΄λμ€λ‘ μ¬μ©ν μ μλ final ν΄λμ€μ΄λ€.
4) final λ©μλ: final ν€μλλ‘ μ μΈλ λ©μλλ μμ ν΄λμ€μμ μ¬μ μν μ μλ final λ©μλμ΄λ€.
class λ€μ€μμ νμ© X
interface λ€μ€μμ νμ© O
Q4) Parent ν΄λμ€λ₯Ό μμν΄μ Child ν΄λμ€λ₯Ό μμ±νλ€.
μμ 1)
package ch07;
public class Parent1 {
public String name; //μ κ·Όμ νμκ° publicμΈ μΈμ€ν΄μ€ νλ
public Parent1(String name) { //μ κ·Όμ νμκ° publicμΈ λ§€κ°λ³μ
this.name = name;
}
}
μμ 2) this.name λμ super(name);μ λ£λλ€.
package ch07;
public class Child1 extends Parent1{
private int studentNo;
public Child1(String name, int studentNo) {
super(name);
this.studentNo = studentNo;
}
}
Q5) Parent ν΄λμ€λ₯Ό μμλ°μ Child ν΄λμ€λ₯Ό μμ±νλ€. ChildExample ν΄λμ€λ₯Ό μ€ννμ λ νΈμΆλλ κ° ν΄λμ€μ μμ±μμ μμλ₯Ό μκ°νλ©΄μ μΆλ ₯ κ²°κ³Ό μμ±νλ€.
μμ 1)
package ch07;
public class Parent {
public String nation;
public Parent() { //κΈ°λ³Έμμ±μ
this("λνλ―Όκ΅"); //맀κ°λ³μ 1κ°μΈ μμ±μ
System.out.println("Parent() call");//[2]
}
public Parent(String nation) {
this.nation = nation;
System.out.println("Parent(String nation) call");//[1]
}
}
μμ 2) super()κ° μλ΅λ¨
package ch07;
public class Child extends Parent {
private String name;
public Child() { //μμ ν΄λμ€μ κΈ°λ³Έ μμ±μ
//super();// μλ΅λμ΄ μλ€.
this("νκΈΈλ");
System.out.println("Child() call");//[4]
}
public Child(String name) {
this.name = name;
System.out.println("Child(String name) call");//[3]
}
}
μμ 3)
package ch07;
public class ChildExample {
public static void main(String[] args) {
Child child = new Child();
}
}
κ²°κ³Ό) super()κ° μλ΅λ¨.
super: λΆλͺ¨ν΄λμ€ μμ±μ νΈμΆ
μμν΄λμ€μ λͺ¨λ μμ±μμ λΆλͺ¨ ν΄λμ€μ κΈ°λ³Έ μμ±μλ₯Ό νΈμΆνλ super()κ° μλ΅λμ΄ μλ€.
맀κ°λ³μ μ λ ₯ μ, κ·Έμ λ§λ λΆλͺ¨ ν΄λμ€ μμ±μ νΈμΆνλ€.
맀κ°λ³μ λ―Έμ λ ₯ λλ super() μλ΅ μ, λΆλͺ¨ ν΄λμ€ κΈ°λ³Έ μμ±μ νΈμΆνλ€.
μ°Έκ³ : https://pathas.tistory.com/134
this("λνλ―Όκ΅")μ μν΄ Parent(String name) callμ΄ λ¨Όμ μ€νλλ€.
this("νκΈΈλ")μ μν΄ Child(String name) callμ΄ λ¨Όμ μ€νλλ€.
Parent(String nation) call
Parent() call
Child(String name) call
Child() call