πToday...
Most powerful is he who has himself in his own power. - Seneca
βμ€λμ TIL(Today I Learn)
μμκ³Ό ν¬ν¨κ΄κ³
μμ(inheritance)μ κΈ°μ‘΄μ ν΄λμ€λ₯Ό μ¬νμ©νμ¬ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±νλ μλ°μ λ¬Έλ²μμμ΄λ€. νμ₯λμλ€λ λ»κ³Ό κ°μΌλ©° extendsν€μλλ₯Ό μ¬μ©νλ€. μλ°μ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μμλ λ¨μΌμμ(Single inheritance)λ§μ νμ©νλ€. νμ§λ§ μΈν°νμ΄μ€λΌλ λ¬Έλ²μμλ₯Ό μ¬μ©ν΄μ λ€μ€μμκ³Ό λΉμ·ν ν¨κ³Όλ₯Ό λ΄λκ²μ΄ κ°λ₯νλ€.
public class Main {
public static void main(String[] args) {
Bike bike = new Bike();
Car car = new Car();
MotorBike motorBike = new MotorBike();
bike.run();
car.run();
motorBike.run();
}
}
class Vehicle {
void run() {
System.out.println("Vehicle is running");
}
}
class Bike extends Vehicle {
void run() {
System.out.println("Bike is running");
}
}
class Car extends Vehicle {
void run() {
System.out.println("Car is running");
}
}
class MotorBike extends Vehicle {
void run() {
System.out.println("MotorBike is running");
}
}
// μΆλ ₯κ°
Bike is running
Car is running
MotorBike is running
ν¬ν¨(Composite) κ΄κ³λ μμμ²λΌ ν΄λμ€λ₯Ό μ¬μ¬μ©ν μ μλ λ°©λ²μΌλ‘, ν΄λμ€μ λ©€λ²λ‘ λ€λ₯Έ ν΄λμ€ νμ μ μ°Έμ‘°λ³μλ₯Ό μ μΈνλ κ²μ μλ―Ένλ€. μλ μμ λ‘ νμΈνμ...!
public class Employee {
int id;
String name;
Address address; //μλΆλΆμ΄ μ°Έμ‘°λ³μλ₯Ό μ μΈν΄μ ν¬ν¨κ΄κ³λ‘ μ¬μ©
public Employee(int id, String name, Address address) {
this.id = id;
this.name = name;
this.address = address;
}
void showInfo() {
System.out.println(id + " " + name);
System.out.println(address.city+ " " + address.country);
}
public static void main(String[] args) {
Address address1 = new Address("μμΈ", "νκ΅");
Address address2 = new Address("λμΏ", "μΌλ³Έ");
Employee e = new Employee(1, "κΉμ½λ©", address1);
Employee e2 = new Employee(2, "λ°ν΄μ»€", address2);
e.showInfo();
e2.showInfo();
}
}
class Address {
String city, country;
public Address(String city, String country) {
this.city = city;
this.country = country;
}
}
// μΆλ ₯κ°
1 κΉμ½λ©
μμΈ νκ΅
2 λ°ν΄μ»€
λμΏ μΌλ³Έ
# Object Class
object ν΄λμ€λ μλ°μ ν΄λμ€ μμ κ³μΈ΅λμμ μ΅μμμ μμΉν ν΄λμ€μ΄λ€. μλ°μ λͺ¨λ ν΄λμ€λ Object ν΄λμ€λ‘ λΆν° νμ₯μ΄ λλ€. λ€λ₯Έ ν΄λμ€λ‘ λΆν° μλ¬΄λ° μμμ λ°μ§ μλ ν΄λμ€λ μλμΌλ‘ extends Objectλ₯Ό μΆκ°νλ€.
class ParentEx { // μ»΄νμΌλ¬κ° "extends Object" μλ μΆκ°
}
class ChildEx extends ParentEx {
}
Method Overriding
λ©μλ μ€λ²λΌμ΄λ©μ μμν΄λμ€λ‘ λΆν° μμλ°μ λ©μλμ λμΌν μ΄λ¦μ λ©μλλ₯Ό μ¬μ μ νλκ²μ μλ―Ένλ€. μμ ν΄λμ€μ λ©μλλ₯Ό μ€λ²λΌμ΄λ© νλ €λ©΄ λ€μ 3κ°μ§ μ‘°κ±΄μ΄ μ±λ¦½λμΌνλ€.
- λ©μλ μ μΈλΆκ° μμν΄λμ€μ κ·Έκ²κ³Ό μμ ν μΌμΉν΄μΌ νλ€.
- μ κ·Όμ μ΄μμ λ²μκ° μμ ν΄λμ€μ λ©μλλ³΄λ€ κ°κ±°λ λμ΄μΌ νλ€.
- μμΈλ μμν΄λμ€μ λ©μλλ³΄λ€ λ§μ΄ μ μΈν μμλ€.
public class Main {
public static void main(String[] args) {
Bike bike = new Bike();
Car car = new Car();
MotorBike motorBike = new MotorBike();
bike.run();
car.run();
motorBike.run();
}
}
class Vehicle {
void run() {
System.out.println("Vehicle is running");
}
}
class Bike extends Vehicle {
void run() {
System.out.println("Bike is running");
}
}
class Car extends Vehicle {
void run() {
System.out.println("Car is running");
}
}
class MotorBike extends Vehicle {
void run() {
System.out.println("MotorBike is running");
}
}
// μΆλ ₯κ°
Bike is running
Car is running
MotorBike is running
super&super()
# super()
super()ν€μλλ μμ ν΄λμ€μ μμ±μλ₯Ό νΈμΆνλ κ²μ μλ―Ένλ€. κ·Έλ¦¬κ³ μμ±μμμμλ§ μ¬μ©μ΄ κ°λ₯νκ³ λ°λμ 첫μ€μ μμΌλ§ νλ€. λ§μ½ super()κ° μλ κ²½μ°μλ μμ μμ±μμ 첫μ€μ μ»΄νμΌλ¬κ° μλμΌλ‘ super()λ₯Ό μ½μ νλ€. μ΄λ μμν΄λμ€μ κΈ°λ³Έμμ±μκ° μμΌλ©΄ μλ¬κ° λ°μνλ€.
public class Test {
public static void main(String[] args) {
Student s = new Student();
}
}
class Human {
Human() {
System.out.println("ν΄λ¨Ό ν΄λμ€ μμ±μ");
}
}
class Student extends Human { // Human ν΄λμ€λ‘λΆν° μμ
Student() {
super(); // Human ν΄λμ€μ μμ±μ νΈμΆ
System.out.println("νμ ν΄λμ€ μμ±μ");
}
}
// μΆλ ₯κ°
ν΄λ¨Ό ν΄λμ€ μμ±μ
νμ ν΄λμ€ μμ±μ
# super
super ν€μλλ μμν΄λμ€μ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€. λ§μ½ λΆλͺ¨μ λ©€λ² λ³μμ μμμ λ©€λ²λ³μμ μ΄λ¦μ΄ κ°λ€λ©΄ super.λΆλͺ¨λ©€λ²λͺ μ μ§μ νμ¬ λΆλͺ¨μ λ©€λ²λ³μλͺ μ κ°λ¦¬ν¬μμλ€.
public class Example {
public static void main(String[] args) {
SubClass subClassInstance = new SubClass();
subClassInstance.callNum();
}
}
class SuperClass {
int count = 20; // super.count
}
class SubClass extends SuperClass {
int count = 15; // this.count
void callNum() {
System.out.println("count = " + count);
System.out.println("this.count = " + this.count);
System.out.println("super.count = " + super.count);
}
}
// μΆλ ₯κ°
count = 15
count = 15
count = 20
μΊ‘μνμ ν¨ν€μ§
μΊ‘μνλ νΉμ κ°μ²΄ μμ κ΄λ ¨λ μμ±κ³Ό κΈ°λ₯μ νλμ μΊ‘μλ‘ λ§λ€μ΄ λ°μ΄ν°λ₯Ό μΈλΆλ‘ 보νΈνλ κ²μ λ§νλ€. λ°μ΄ν°λ³΄νΈμ λ΄λΆμ μΌλ‘ μ¬μ©λλ λ°μ΄ν°λ₯Ό μΈλΆλ ΈμΆλ‘λΆν° λ°©μ§νκΈ° μν¨μ΄λ€. (data hiding)
ν¨ν€μ§(package)λ νΉμ ν λͺ©μ μ 곡μ νλ ν΄λμ€μ μΈν°νμ΄μ€μ λ¬Άμμ μλ―Ένκ³ μλ°μμμ ν¨ν€μ§λ 물리μ μΈ νλμ directoryμ΄λ€. μ΄ directoryλ κ³μΈ΅κ΅¬μ‘°λ₯Ό κ°μ§κ³ μκ³ , κ³μΈ΅κ°μ ꡬλΆμ (.)μΌλ‘ νννλ€. ν¨ν€μ§μ μ₯μ μ ν΄λμ€μ μΆ©λμ λ°©μ§ν΄μ€λ€. κ°μ μ΄λ¦μ ν΄λμ€λ₯Ό κ°μ§κ³ μλλΌλ λ€λ₯Έ ν¨ν€μ§μ μμλλ©΄ μ΄λ¦λͺ μΌλ‘ μΆ©λμ΄ λ°μνμ§ μλλ€.
ν¨ν€μ§μ μ μΈμ μλ μ½λμ κ°μ΄ μ μΈνλ€.
package practicepack.test2; // import λ¬Έμ μ¬μ©νμ§ μλ κ²½μ°, λ€λ₯Έ ν¨ν€μ§ ν΄λμ€ μ¬μ©λ°©λ²
public class PackageImp {
public static void main(String[] args) {
practicepack.test.ExampleImport example = new practicepack.test.ExampleImport();
}
}
νμ§λ§ μμκ°μ΄ λ€λ₯Έν¨ν€μ§μ ν΄λμ€λ₯Ό μ¬μ©νκΈ° μν΄μλ μ μΈμμ ν¨ν€μ§λͺ μ λͺ¨λ ν¬ν¨μμΌμ μ 보λ₯Ό μ 곡ν΄μΌνλ€. μ΄λ₯Ό μ’λ μ½κ² μ¬μ©νλ λ°©λ²μ΄ importμ΄λ€. μ¬μ©λ²μ μλμ κ°λ€.
package practicepack.test;
public class ExampleImp {
public int a = 10;
public void print() {
System.out.println("Import λ¬Έ ν
μ€νΈ")
}
package practicepack.test2; // import λ¬Έμ μ¬μ©νλ κ²½μ°
import practicepack.test.ExampleImp // import λ¬Έ μμ±
public class PackageImp {
public static void main(String[] args) {
ExampleImp x = new ExampleImp(); // μ΄μ ν¨ν€μ§ λͺ
μ μλ΅ κ°λ₯
}
}
μ΄λ κ² μ¬μ©νλ©΄ ν¨ν€μ§λͺ μ μλ΅νκ³ ν΄λμ€μ λ°λ‘ μ κ·Όμ΄ κ°λ₯νλ€.
μ κ·Όμ μ΄μ
μ κ·Όμ μ΄μλ λ©€λ² λλ ν΄λμ€μ μ¬μ©λμ΄ μΈλΆμμ μ κ·Όνμ§ λͺ»νλλ‘ μ ννλ μν μ νλ€. μλ΅μμλ defaultλ‘ μ§μ λκ³ ν΄λμ€,λ©€λ²λ³μ,λ©μλ,μμ±μμ μ§μ μ΄ κ°λ₯νλ€.
νλΌμ΄λΉ(private) : κ°μ ν΄λμ€ λ΄λΆμμλ§ μ κ·Όν μ μλ€.
λν΄νΈ(default) : κ°μ ν¨ν€μ§λ΄μμλ§ μ κ·Όμ΄ κ°λ₯νλ€.
νλ‘ν ν°λ(protected) : κ°μ ν¨ν€μ§ λ΄μμ μ κ·Όν μ μλ€. λ€λ₯Έ ν΄λμ€μμλ μ κ·Όν μ μμ§λ§, μμ λ°μ μμ ν΄λμ€μμλ μ κ·Όμ΄ κ°λ₯νλ€.
νΌλΈλ¦(public) : μ κ·Ό μ νμ΄ μλ€. λ€λ₯Έ ν¨ν€μ§, λ€λ₯Έ ν΄λμ€μμ μ κ·Όν μ μλ€.
getter / setter method
getter /setter λ©μλλ λνμ μΌλ‘ private μ κ·Όμκ° ν¬ν¨λμ΄μλ κ°μ²΄μ λ³μμ λ°μ΄ν°κ°μ μΆκ°νκ±°λ μμ νκ³ μΆμλ κ°λ₯νκ² ν΄μ€λ€. setterλ λ°μ΄ν°κ°μ λ³κ²½ν μμκ² ν΄μ£Όκ³ , getterλ μ€μ ν λ³μκ°μ μ½μ΄μ€λλ° μ¬μ©λλ€.
μλ μ½λλ₯Ό μ°Έκ³ νμ.
public class GetterSetterTest {
public static void main(String[] args) {
Worker w = new Worker();
w.setName("κΉμ½λ©");
w.setAge(30);
w.setId(5);
String name = w.getName();
System.out.println("κ·Όλ‘μμ μ΄λ¦μ " + name);
int age = w.getAge();
System.out.println("κ·Όλ‘μμ λμ΄λ " + age);
int id = w.getId();
System.out.println("κ·Όλ‘μμ IDλ " + id);
}
}
class Worker {
private String name; // λ³μμ μλν. μΈλΆλ‘λΆν° μ κ·Ό λΆκ°
private int age;
private int id;
public String getName() { // λ©€λ²λ³μμ κ°
return name;
}
public void setName(String name) { // λ©€λ²λ³μμ κ° λ³κ²½
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age < 1) return;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
// μΆλ ₯κ°
κ·Όλ‘μμ μ΄λ¦μ κΉμ½λ©
κ·Όλ‘μμ λμ΄λ 30
κ·Όλ‘μμ IDλ 5
πνΌμμ ν΄κ²°νκΈ°