객체지향의 4가지 특징
객체지향의 4가지 특징 - 1) 캡슐화
객체의 정보를 외부에서 직접 접근하지 못하게 보호하는 개념
접근제어자

캡슐화가 된 데이터에 접근하는 방법
게터 활용법
public class Person {
private String secret;
public String getSecret() {
return this.secret; // ✅ 객체의 secret 속성 반환
}}
세터 활용법
public class Person {
private String secret;
public void setSecret(String secret) {
this.secret = secret; // ✅ secret 속성 설정 및 변경
}}
객체지향의 4가지 특징 - 2) 상속

부모클래스의 멤버에 접근할 때 사용하는 키워드
public class Child extends Parent {
private String familyName = "gim"
public void superExample() {
System.out.println("우리 " + this.familyName + " 가문은 ...");
System.out.println("원래 가문의 이름은 " + super.familyName);
}}
부모 인스턴스의 생성자
부모가 먼저 생성되고 자식이 생성
super는 항상 생성자의 첫 줄에 위치 !!
public class Child extends Parent {
...
public Child() {
super(); // ✅ (1)부모클래스 생성자를 먼저 호출
// 추가로직은 여기에 작성
}}
class Child extends Parent {
...
@Override
void introduceFamily() { // ✅ 자식클래스에서 재정의
System.out.println("오버라이드");
}}
객체지향의 4가지 특징 - 3) 추상화
객체지향의 4가지 특징 - 4) 다형성
public class Main {
public static void main(String[] args) {
// 다형성 활용
Animal animal = new Cat();
animal.exist(); // ✅
animal.makeSound(); // ✅
}}
public class Main {
public static void main(String[] args) {
// 다형성 활용
Animal animal = new Cat();
animal.exist();
animal.makeSound();
Cat cat = (Cat) animal; // ✅ 다운캐스팅(부모Animal -> 자식Cat)
cat.scratch(); // ✅ 자식 클래스의 기능 활용 가능
}
}
public class Main {
public static void main(String[] args) {
Animal animal2 = new Dog();
// ✅ 안전한 다운캐스팅(animal2 가 Cat 의 인스턴스 유형인지 확인합니다.)
if (animal2 instanceof Cat) {
Cat cat = (Cat) animal2;
cat.scratch();
} else {
System.out.println("객체가 고양이가 아닙니다.");
}
}
}