๊ฐ์ฒด์งํฅ์ด๋,
์ปดํจํฐ ํ๋ก๊ทธ๋จ์
๋ช ๋ น์ด์ ๋ชฉ๋ก์ผ๋ก ๋ณด๋ ์๊ฐ์์ ๋ฒ์ด๋
์ฌ๋ฌ ๊ฐ์ฒด๋ค์ ๋ชจ์์ผ๋ก ํ์ ํ๋ ๊ฒ
โ ์บก์ํ(Encapsulation)
- ์๋ก ์ฐ๊ด ์๋ ์์ฑ(data)๋ค๊ณผ ๊ธฐ๋ฅ(method)๋ค์ ํ๋์ ์บก์๋ก ๋ฌถ๊ณ , ์ด ์บก์์ ์ธ๋ถ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด๋ค.
- ์์คํ ๋ด๋ถ ๊ตฌํ์ ์ธ๋ถ์ฌํญ์ ์ธ๋ถ๋ก ๋๋ฌ๋ด์ง ์๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
- ์บก์ํ๋ ๋ด๋ถ ๊ตฌํ์ ์ธ๋ถ์์ ์์ ํ ์ ์๊ณ , ์ธ๋ถ์์๋ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ฅผ ํตํด์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ์บก์ํ์ ๋ชฉ์ ์ ์ ๋ณด ๋ณดํธ์ ์ ๋ณด ์๋์ด๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์บก์ํ๋ ๊ฐ์ฒด์ ๋ด๋ถ ๋ฐ์ดํฐ์ ์ ๊ทผ์ ํ์๋ฅผ private์ผ๋ก ์ค์ ํจ์ผ๋ก์จ ๊ตฌํํ๋ค.
- ์ธ๋ถ์์๋ public ์ ๊ทผ์ ํ์๋ก ์ ์๋ ํจ์๋ฅผ ํตํด ๊ฐ์ฒด์ private ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
๐ฅ ์บก์ํ์ ์ฅ์
- ๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌํ์ ๋ณ๊ฒฝํ์ฌ๋ ์ธ๋ถ ์ฝ๋์ ์ํฅ์ ๋ ์ฃผ๊ธฐ ๋๋ฌธ์, ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๋ค
- ์ฝ๋์ ์์ ์ฑ์ ๋์ธ๋ค.
- ์ ๋ณด์๋์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ, ๊ฐ ๊ฐ์ฒด๋ค์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ ์ ์๊ฒ ๋๋ค.
- ๋ณด์์ฑ์ ์ฆ๊ฐ์ํจ๋ค.
๐ฅ ์์
Student.java
public class Student {
private String name;
private int age;
private int studentId;
public Student() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
}
- ํ์์ ๊ฐ์ธ์ ๋ณด๋ฅผ private์ผ๋ก ์ค์ ํ์ฌ ์บก์ํํ์๋ค. ๋ฐ๋ผ์ ์ธ๋ถ์์๋ name, age, studentId์๋ ์ง์ ์ ๊ทผํ ์ ์๊ณ , public์ผ๋ก ์ ์๋ ๋ฉ์๋๋ค์ ํตํด์๋ง ์ ๊ทผ ๋ฐ ์์ ์ด ๊ฐ๋ฅํ๋ค.
โ ์ถ์ํ(Abstraction)
- ๋ณต์กํ ์์คํ ์ผ๋ก๋ถํฐ ๊ทผ๋ณธ์ ์ธ ๋ถ๋ถ์ ์ถ์ถํ๊ณ , ์ถ์ถํ ๋ถ๋ถ๋ค์ ๊ฐ๋จํ๊ณ ์ ํํ ์ธ์ด๋ก ํํํ๋ ๊ฒ
- ์ฝ๊ฒ ๋งํด, ๊ตฌ์ฒด์ ์ธ ์ธ๋ถ์ฌํญ์ ๋ฌด์ํ๊ณ ํต์ฌ์ ์ธ ํน์ง๋ค์ ๊ฐ์กฐํ์ฌ ๊ฐ์ฒด๋ฅผ ์ค๊ณํ๋ ๊ฒ.
๐ฅ ์ถ์ํ์ ์ฅ์
- ๊ฐ์ฒด์ ๋ด๋ถ ๋์ ๋ฐฉ์์ ์จ๊ธฐ๊ณ ์ธํฐํ์ด์ค๋ง์ ๋ ธ์ถ์ํค๋ฏ๋ก, ๊ฐ์ฒด ๊ฐ ์ํธ์์ฉ๊ณผ ๋ณต์ก์ฑ์ด ๊ฐ์ํ๋ค.
- ์ฝ๋์ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๋ค.
- ์์คํ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ๊ณ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ์ฆ๊ฐํ๋ค.
- ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ด ์ฆ๊ฐํ๋ค.
๐ฅ ์์
Animal.java
public interface Animal {
public void say();
public void walk();
}
Dog.java
public class Dog implements Animal{
@Override
public void say() {
System.out.println("๋ฉ๋ฉ");
}
@Override
public void walk() {
System.out.println("ํ ๋๋๋๋");
}
}
Cat.java
public class Cat implements Animal {
@Override
public void say() {
System.out.println("์ผ์น");
}
@Override
public void walk() {
System.out.println("์ฐ๋ค๋ค๋ค๋ค");
}
}
โ ๋คํ์ฑ(Polymorphism)
- ์ฌ๋ฌ ๊ฐ์ง ํํ๋ฅผ ๊ฐ์ง ์ ์๋ ๋ฅ๋ ฅ.
- ํ๋์ ์ฝ๋๊ฐ ์ฌ๋ฌ ๊ฐ์ง ์๋ฃํ์ผ๋ก ๊ตฌํ๋์ด ์คํ๋๋ ๊ฒ.
- ๋คํ์ฑ์ ํตํด์ ํ๋์ ํ์ ์ ์ฐธ์กฐ๋ณ์๋ก ์ฌ๋ฌ ํ์ ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
- ์ฆ, ๋ถ๋ชจ ํด๋์ค์ ์ฐธ์กฐ๋ณ์๋ก ์์ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
๐ฅ ๋คํ์ฑ์ ์ฅ์
- ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์๋ค.
- ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ์ฆ๊ฐ์ํจ๋ค.
- ์ฝ๋์ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๋ค.
๐ฅ ์์
Car.java
public class Car {
public void drive(){
System.out.println("์ด์ ์ค...");
}
public void stop(){
System.out.println("์ ์ง!!!");
}
}
Ambulance.java
public class Ambulance extends Car{
public void siren(){
System.out.println("์์ฉ์์ฉ์์ฉ");
}
}
FireTruck.java
public class FireTruck extends Car {
public void water(){
System.out.println("์ดค์์์
๐ฆ"); // ๋ฌผ๋ฟ๋ฆฌ๋ ์๋ฆฌ์
}
}
- ๊ฐ์ฒด ํ์ ์ Ambulance, FireTruck ํ์ ์ผ๋ก ์ ์ธํ์ฌ๋ Car ํ์ ์ ๋ฉค๋ฒํจ์๋ค์ ์ฐธ์กฐํ์ฌ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
โ ์์์ฑ(Inheritance)
- ๊ธฐ์กด์ ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ํ์ฅ๋ ์๋ก์ด ํด๋์ค๋ฅผ ์์ฑํ๋ ๊ฒ
- ํด๋์ค๋ค์ ์์์ ํตํด ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๋ ๊ฒ ๋๋ค
- ์์ํด์ฃผ๋ ํด๋์ค๋ฅผ ๋ถ๋ชจ ํด๋์ค(๋๋ superclass), ์์๋ฐ๋ ํด๋์ค๋ฅผ ์์ ํด๋์ค(๋๋ subclass)๋ผ๊ณ ํ๋ค.
- ์์ํด๋์ค์์๋ ๋ถ๋ชจํด๋์ค์ ๋ฉค๋ฒ ๋ณ์์ ํจ์๋ค์ ์๋กญ๊ฒ ๊ตฌํํ ํ์๊ฐ ์๋ค. ์์ํด๋์ค์์ ์๋ก ์ ์ํ ๋ฉค๋ฒ๋ง์ ๊ตฌํํ๋ฉด ๋๋ค.
๐ฅ ์์์ ์ฅ์
- ์ฝ๋์ ์ค๋ณต์ด ๊ฐ์ํ์ฌ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๋ค.
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ์ฆ๊ฐํ๋ค.
- ์ฝ๋ ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ์ด ์ฉ์ดํด์ง๋ค.
- ์ ์ฐํ ์ฝ๋ ์์ฑ์ด ๊ฐ๋ฅํด์ง๋ค
๐ฅ ์์
Person.java
public class Person {
String name;
int age;
public Person(){}
public void showInfo(){
System.out.println("์ด๋ฆ: " + name + ", ๋์ด: " + age);
}
}
Student.java
public class Student extends Person {
int studentId;
public Student() {}
public void showStudentInfo(){
System.out.println("์ด๋ฆ: " + name + ", ๋์ด: " + age + ", ํ๋ฒ: " + studentId);
}
}
'๊ฐ์ธ ๊ณต๋ถ > Java, Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Reflection (0) | 2023.11.17 |
---|---|
[Java] equals(), hashCode() (0) | 2023.10.25 |
[Java] BlockingQueue (0) | 2023.10.18 |
[Java] Java TCP socket programming (0) | 2023.09.19 |
[Java] ์๋ฐ ๋ก๊น (Logging) (0) | 2023.09.06 |