[한화시스템 BEYOND SW캠프 7기] #24. 상속과 접근 제어자

아로롱·2024년 6월 15일

BEYOND SW CAMP 7

목록 보기
25/30

👨‍👩‍👧‍👦 상속(Inheritance)

한 클래스의 속성과 메서드를 다른 클래스가 물려 받는 것을 의미.
기존의 부모 클래스의 기능자식 클래스가 물려 받아,
새로운 기능을 추가하거나 재정의(오버라이딩)하여 새로운 클래스를 정의하는 것.

class 자식클래스이름 extends 부모클래스이름 {...}

부모 클래스(parent class) : 기존에 정의되어 있던 클래스.
자식 클래스(child class) : 부모 클래스를 상속하기 위해 새롭게 작성되는 클래스.

  • 부모 클래스에 새로운 필드, 메소드를 하나 추가하면 자식 클래스에도 자동으로 해당 필드가 추가된 것처럼 동작함.

자식 클래스 설계 시 중복되는 요소를 미리 부모 클래스에 작성해서 중복을 제거하기 위해 사용.
⇒ 재사용 목적 !

주요 특성

  • 부모 클래스에서 private 은 자식 클래스에서 접근 불가.
  • 자바의 클래스는 단 한 개의 클래스만을 상속받는 단일 상속만이 가능.
    • 추후 배우게 될 interface 에서는 다중 상속 (정확히는 구현)
  • 자식 클래스는 부모 클래스의 메서드를 상속 받아, 다시 새롭게 정의 가능.
    • 메서드 오버라이딩 !

🧩 메서드 오버라이딩(Method Overriding)

부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 다시 정의하는 행위.
오버라이딩하는 메서드는 부모 클래스의 메서드와 동일한 이름을 사용해야 하며,
메서드의 파라미터(타입, 순서, 개수)도 동일해야 한다.

오버로딩과 혼동하지 말 것 !

오버로딩은 매개변수를 달리하여 새로운 메서드를 정의하는 것이고,
오버라이딩은 상속받은 기존의 메서드를 재정의하는 것이다!

class parents{
    int a = 10;
    private int b = 20;
    void parentMethod(){
        System.out.println("부모 클래스입니다.");
    }
}

public class C0301Inheritance extends parents{
    int c = 30;
    public static void main(String[] args) {
//        System.out.println(a); => static 이 없어서 호출이 안된다.
        C0301Inheritance c1 = new C0301Inheritance();
        System.out.println(c1.a);
        System.out.println(c1.c); // 자식 클래스라 하더라도 private 변수는 상속 및 접근 불가.
        // 메서드 상속
        c1.parentMethod();
    }
    // 부모 메서드 재정의 = overriding 오버라이딩 (매우 중요 !!!)
    // @ : 성능의 최적화를 위해 붙여주는 게 좋은 것으로 알려져있음.
    @Override
    void parentMethod() {
        System.out.println("부모 클래스가 아니라 자식 클래스입니다.");
    }
    void childMethod() {
        System.out.println("자식 클래스입니다.");
    }
}

🥡 패키지(Package)

클래스와 인터페이스의 집합이자, 하나의 디렉터리를 의미.

package 패키지이름;

위와 같이 선언한 패키지에 속한 클래스를 다른 파일에서 사용하기 위해서는 import.

import 패키지이름.클래스이름;
import 패키지이름.*;

🎛️ 접근 제어자

클래스와 클래스 멤버의 선언 시 사용하여 외부 접근을 제어하는 목적으로 사용.
public : 같은 클래스 내에서만 접근 허용
default : 접근 제어의 기본값. 같은 패키지에 속하는 멤버에서만 접근 허용.
public : 외부로 공개되며, 객체를 사용하는 프로젝트의 어디에서나 직접 접근 가능.
protected : 자식 클래스에 대해서는 패키지가 달라도 접근 가능.

public > protected > default > private 순서로 접근 제한 수준을 가진다.

static : 변수에 사용시 클래스 변수 | 메서드에 사용시 클래스 메서드

  • 프로그램 시작 시 최초 단 한 번만 생성되고 초기화된다는 특징이 있다.

final : 상수(constant)를 만들기 위해 사용.

  • 클래스에 사용하면 상속불가한 클래스.
  • 메서드에 사용하면 오버라이딩 불가.

abstract : 추상 제어자. 선언부만 있고 구현부는 없는 메서드 생성.

profile
Dilige, et fac quod vis

0개의 댓글