Day 12 - 26.09.09

서코딩·2026년 9월 9일

자바

목록 보기
12/19

0. 복습

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

1) public

  • 어디서든 접근 가능

2) protected

  • 같은 패키지 내에서만 접근 가능
  • 단, 자식 클래스는 패키지가 달라도 사용 가능

3) default

  • 접근제한자를 생략하면 default
  • 같은 패키지 내에서만 접근 가능

4) private

  • 같은 클래스 내부에서만 접근 가능
  • getter, setter를 사용하여 필드에 접근하는 것을 허용

캐스팅(Casting)
: A타입 객체를 B타입으로 변환하는 것
일반적으로 불가능하지만 두 클래스가 상속관계인 경우 가능

1) 캐스팅의 종류
(1) 업캐스팅(Upcasting)
: 자식 클래스 객체를 부모 타입으로 변환

(2) 다운캐스팅(Downcasting)
: 부모 타입 객체를 자식 타입으로 변환
이미 업캐스팅 된 객체를 다시 자신의 타입으로 되돌리는 것

2) 캐스팅 주의사항

  • 자식 클래스에서 재정의한 메서드는 업캐스팅 후에도 자식 클래스의 메서드가 호출됨
  • 자식 클래스에서 추가한 메서드는 업캐스팅 후 사용할 수 없음
    => 사용하고 싶다면 다시 다운 캐스팅 해야함

** 자식 객체의 타입
: 자식 객체는 부모의 타입도 동시에 갖는다(타입이 여러개)

3) 캐스팅을 사용하는 이유

  • 코드의 중복 방지와 재사용성 증가
  • 유지보수성 증가

1. 추상 클래스

  • abstract 키워드가 붙은 클래스
  • 추상 메서드가 1개 이상 있는 클래스는 반드시 추상 클래스로 선언해야 한다
    (미완성된 클래스)

1) 추상 메서드

  • 메서드를 선언만 하고 구현({}중괄호 영역)을 하지 않은 것을 추상 메서드라고 한다(미완성된 메서드)
  • ex) abstract 리턴타입 메서드명(매개변수, ...);
  • 마지막(()뒤에) 세미콜론을 작성한다

2) 추상 클래스 선언

abstract class 클래스명{
	리턴타입 메서드명(매개변수, ...);
    * 일반 메서드도 들어갈 수 있음
}
  • abstract 키워드 작성
  • 객체를 만들 수 없다 => 미완성된 클래스이므로

** 미완성된 메서드(추상 메서드)는 상속 받는 자식 클래스에서 반드시 재정의하여 구현을 해야만 해당 자식 클래스로 객체화할 수 있다
그러므로 [강제성]을 부여하기 위해서 추상 메서드로 선언한다

3) 추상 클래스를 사용하는 이유
: 공통되는 속성과 행위를 추상화하여 부모 클래스를 만드는데
모든 자식 클래스에서 구현해야하는 메서드가 있다면 추상 메서드로 선언하는 것이 좋다

  • 추상 클래스를 상속 받는 자식 클래스는 추상 메서드를 오버라이딩하지 않으면 오류가 발생하므로 [강제성]이 생기게 된다
  • 만약 부모 클래스에서 메서드를 구현한다면 강제성이 없으므로 자식 클래스를 만드는 개발자가 재정의하지 않고 그냥 넘어갈 수 있다

2. 인터페이스(Interface)

  • 클래스처럼 타입으로 사용가능한 것
  • 기본적으로 상수와 추상 메서드로만 멤버로 선언할 수 있다
    ** 상수: 값을 한번만 저장할 수 있는 저장공간
  • 즉, 인터페이스가 가지는 모든 메서드는 추상 메서드
    => 객체화 불가능

1) 인터페이스 문법

  • 접근제어자 interface 인터페이스명 {}
    ex) public interface MyInter{}

2) 문법 특징

  • 모든 필드는 public static final 이 붙는다
  • 모든 메서드는 public abstract가 붙는다
  • 인터페이스는 extends 로 상속하는 것이 아니라 implements(구현)한다.

3) 인터페이스의 특징

  • 인터페이스는 다중 구현이 가능하다
  • 인터페이스끼리는 extends(상속)이 가능하다
  • 클래스 상속과 인터페이스 구현은 별개이다
    (하나의 클래스에 extends와 implements 가 동시에 가능)

4) 인터페이스 사용 이유
(1) 추상화와 다형성 구현

  • 공통되는 기능을 하나의 인터페이스로 정의할 수 있다(추상화)
  • 참조변수의 다형성(캐스팅)을 활용하면 여러 타입 객체를 하나의 상위 타입 변수로 편하게 다룰 수 있다
    이를 통해 코드의 재사용성이 높아지고, 새로운 클래스 추가 시 기존 코드 변경을 최소화할 수 있다

(2) 메서드 표준화

  • 메서드 선언부가 곧 메서드의 사용방법이다
  • 공통되는 기능을 하나의 인터페이스로 추상화하게 되면 해당 인터페이스를 구현하는 여러 클래스들은 모두 같은 방식으로 기능을 제공하게 된다
  • 메서드 표준화는 개발자간의 협업에서 매우 중요하다

(3) 다중 구현 지원

  • 자바의 상속은 단일 상속만 지원한다
    단일 상속을 모호성을 방지하기 위한 좋은 수단이지만 프로그램의 규모가 커지면 단일 상속이 아쉬운 경우가 많다
    (하나의 클래스에서 할 수 있는 역할에 제한이 걸려 유연성이 떨어짐)
    => 이를 인터페이스의 다중 구현으로 대체한다
profile
서코딩 127 !

0개의 댓글