[JAVA] 자바를 JAVA (4)

wannabeing·2025년 3월 4일
1

SPARTA-TIL

목록 보기
4/22

✋🏻 인터페이스

  • 클래스가 따라가야할 최소한의 공통 규칙/표준
  • 세부 구현은 클래스에서 한다.

1) 인터페이스 사용하는 이유

  • 모든 설계에 표준 이 있는 이유와 같다.
  • 개발자마다 서로 다른 방식으로 메서드를 만든다면 일관성이 깨질 수 있다.
  • 세부 구현은 각 클래스에 맡긴다.
  • 일관성을 유지하면서 클래스가 고유한 특색을 확장할 수 있도록 돕는다.

2) 인터페이스 다양한 기능

  • 다중구현 (implements)

    한 개의 클래스, 여러개의 인터페이스

    // 🚀 "동물의 기본 기능" 인터페이스
    interface Animal {
       void eat();
    } 
    // ✈ "나는 기능" 인터페이스
    interface Flyable {
       void fly();
    }
    // ✅ 다중 구현 
    class Bird implements Animal, Flyable {
       public void eat() { ... }
    
       public void fly() { ... }
    
       // 추가적으로 land() 메서드도 가능하지만 필수는 아님
       public void land() { ... }
    }
  • 다중상속 (extends)

    한 개의 인터페이스, 여러개의 인터페이스

    // 1. 기본 인터페이스: 동물의 기본 기능
    interface Animal {
       void eat();
    }
    // 2. 추가 인터페이스: 나는 기능
    interface Flyable {
       void fly();
    }
    // 3. ✅ 다중 상속새로운 인터페이스: 동물 + 나는 기능
    interface FlyableAnimal extends Animal, Flyable {
       void land();  // 추가 기능
    }

3) 인터페이스의 변수를 선언하는 경우

  • 변수 선언은 최소화하는게 좋다.
  • public static final로 선언된다.
  • static으로 선언되기 때문에 인스턴스화 하지 않아도 사용 가능하다.
    public interface Config {
       int POPULATION = 100; // public static final 로 선언됩니다.
    }

📁 객체지향 (OOP)

1. 캡슐화

  • 객체의 정보를 외부에서 직접 접근하지 못하게 보호하는 개념
  • 클래스/객체의 캡슐화는 접근제어자를 통해 구현 가능

💡 접근제어자 ?

  • 접근제어자는 클래스, 변수, 메서드, 생성자의 접근 범위를 제한하는 키워드

2. 상속 (extends)

  • 클래스 간에 관계를 부모/자식으로 바라보는 개념
  • extends 키워드를 사용

❓ 상속의 장점 및 특징

  • 재사용성
  • super(부모인스턴스 생성자) : 부모클래스의 변수,메서드의 접근 가능
  • 확장: 부모클래스 기능을 유지하며 자식클래스에서 기능을 확장할 수 있음

💡 추상 클래스

  • 자식에게 특정 메서드 구현을 강제할 때, abstract 키워드 사용
  • 추상클래스는 직접 객체를 생성할 수 없다!

❓ 추상클래스 vs 인터페이스 차이

  • 계층구조 → 인터페이스
  • 표준/규칙 → 인터페이스
  • 계층구조 표현과 공통 속성/기능을 재사용할 때 → 추상클래스

3. 추상화

  • 불필요한 정보를 제거하고 본질적인 특징만 남기는 것
  • 고양이 → 동물 → 생명체와 같이 계층적 특징을 활용하여 유지보수성을 높임

4. 다형성

  • 하나의 타입으로 여러 객체를 다룰 수 있음
    ex. 동물 → 고양이/강아지를 다룰 수 있음

🚀 형변환(Casting)

  • 부모타입으로 자식타입을 다룰 수 있는 이유는 자동으로 형변환(Casting) 이 발생했기 때문이다.

  • 자식타입 → 부모타입: 업캐스팅(UpCasting)
    업캐스팅은 자식 클래스의 고유기능을 활용할 수 없다.
    따라서, 자식 클래스의 고유 기능을 사용하려면 다운캐스팅 이 필요하다.

    public class Main {
    
       public static void main(String[] args) {
    
           // 다형성 활용
           Animal animal = new Cat(); // ✅ 자동 형 변환
           animal.exist(); // ✅
           animal.makeSound(); // ✅
           animal.scratch(); // ❌ 사용 불가
       }
    }
  • 부모타입 → 자식타입: 다운캐스팅(DownCasting)
    다운캐스팅으로 자식 클래스의 고유 메서드를 사용할 수 있다.

    단, 잘못된 다운캐스팅은 컴파일단계에서 감지할 수 없으므로 반드시 instanceof 키워드를 사용해야 한다.

    public class Main {
    
       public static void main(String[] args) {
    
           Animal animal2 = new Dog();
    
           if (animal2 instanceof Cat) {
               Cat cat = (Cat) animal2; // ✅ 다운캐스팅 (부모Animal -> 자식Cat)
               cat.scratch(); // ✅ 자식 클래스의 기능 활용 가능
           } else {
               System.out.println("객체가 고양이가 아닙니다.");
           }
       }
    }
    

출처
스파르타 코딩클럽 자바 문법 종합반 2주차

profile
wannabe---ing

0개의 댓글