자바 객체 지향

DONI·4일 전
0

자바

목록 보기
2/2
post-thumbnail

📌 오버로딩과 오버라이딩

오버로딩: 같은 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것 (🍀)
리턴 타입은 관계 없으나 매개변수의 개수, 타입, 순서가 달라야 한다.

오버라이딩: 부모 클래스의 메서드를 자식 클래스에서 재정의하여 사용하는 것 (🍀)
메서드 헤드라인 앞에 @Override 어노테이션을 작성하며,
메서드의 이름, 리턴 타입, 매개변수의 개수, 타입, 순서가 모두 같아야 한다.
접근 제한자는 부모 메서드와 같거나 더 넓은 범위로만 변경할 수 있다.


📌 다형성(Polymorphism) (🍀)

하나의 객체가 여러 가지 형태를 가질 수 있는 성질
Java에서는 상속과 인터페이스를 활용하여 다형성을 구현

   🔍 다형성이 필요한 이유
       1. 부모 클래스나 인터페이스로 다양한 자식 객체를 처리할 수 있어 코드의 재사용성 증가
       2. 새로운 기능, 클래스를 추가해도 기존 코드를 수정하지 않아 확장성 증가
       3. 코드 변경 시 하나의 부모 타입만 수정하면 되므로 유지보수성 향상
       4. 실행 시 객체의 타입에 따라 동작이 달라질 수 있어 유연한 프로그램 설계 가능


📌 상속(Inheritance) (🍀)

부모 클래스의 필드와 메서드를 자식 클래스에서 물려받아 사용하는 것

   🔍 상속의 단점
       1. 부모 클래스를 변경하면 자식 클래스에도 영향을 미쳐 의존성이 증가
       2. 상속 구조가 깊어질수록 코드의 복잡성이 증가해 문제를 추적하기 어려워질 수 있음
       3. 부모 클래스의 필드와 메서드가 자식 클래스에서 노출되어 캡슐화 원칙이 깨질 수 있음
       4. "is-a" 관계로 설계되어, 잘못 설계된 상속 구조는 확장 및 수정이 어려움


📌 상속과 조합의 차이 (🍀)

특징상속조합
관계"is-a" 관계"has-a" 관계
유연성부모 클래스에 강하게 의존하여 변경이 어려움독립적인 구성 요소로 유연하게 확장 가능
코드 재사용부모 클래스의 기능을 상속 받아 재사용포함된 객체의 기능을 호출하여 재사용
캡슐화부모 클래스의 내부 구현이 자식 클래스에 노출캡슐화가 유지되며 수정 시 영향이 적음
구조 복잡성상속 구조가 깊어질수록 복잡성 증가독립적인 관계로 상대적으로 간단

📌 instanceof 키워드 (🍀)

객체가 특정 클래스의 인스턴스인지 확인하는 키워드
클래스 간의 상속 관계인터페이스 구현 여부를 확인할 때 주로 사용

   🔍 instanceof 키워드 사용 시 문제점
       1. 클래스 타입을 코드에 직접 작성하면 코드가 변경되거나
          클래스가 추가될 때마다 수정해야 하므로 코드 유지보수성 저하
       2. 타입에 따른 별도의 처리를 요구하기 때문에 다형성의 이점이 감소


📌 interface (🍀)

Java에서 클래스가 구현해야 할 메서드의 규격(명세)를 정의하는 추상적인 구조
구현된 메서드를 가지지 않으며 메서드의 선언만 포함한다.


📌 interfaceAbstract Class의 차이

특징인터페이스추상 클래스
목적클래스가 구현해야 할 규격을 정의공통된 기능을 구현하면서 일부만 추상적으로 정의
상속 관계다중 구현 가능단일 상속만 가능
메서드모든 메서드는 기본적으로 추상 메서드추상 메서드, 일반 메서드 모두 포함 가능
필드public static final 필드만 허용모든 종류의 필드 선언 가능

   🔍 인터페이스와 추상클래스는 언제 사용할까?
        인터페이스는 클래스 간의 공통 규칙을 정의하고 여러 클래스가 이를 구현해야 할 때,
        추상 클래스는 부모 클래스에서 공통 동작을 구현하고
        자식 클래스에서 세부 동작을 확장해야 할 때 사용한다.


📌 final 키워드

변수, 메서드, 클래스의 변경을 방지하는 데 사용되는 키워드

1) 변수: 변수를 상수처럼 선언하여 값을 변경할 수 없도록 선언

  • 초기화 후 값을 변경할 수 없음
  • 반드시 선언 시점 또는 생성자에서 초기화해야 함

2) 메서드: 메서드를 재정의(Override)하지 못하도록 설정

  • final 메서드는 상속 받은 클래스에서 변경할 수 없음
  • 클래스의 핵심 동작을 보호하거나, 보안상의 이유로 사용

3) 클래스: 클래스를 상속 받지 못하도록 설정

  • 보안 또는 설계 상 변경이 필요 없는 클래스에 사용
profile
틀린 내용이 있다면 댓글 또는 이메일로 알려주세요 ❤ꔛ❜

0개의 댓글