Java OOP 개념: 캡슐화 및 상속

7. 캡슐화

개념 이해

객체의 데이터와 동작을 통합하여 내부 구현 세부사항을 숨기는 프로그래밍 기법입니다. 객체 상태는 제공된 메서드를 통해만 접근 및 수정 가능합니다.

접근 제어 키워드

private: 클래스 내부에서만 접근 가능
public: 외부 클래스에서도 접근 가능

Getter/Setter 메서드

Getter: private 필드 값을 반환
Setter: private 필드 값을 설정

필드에 대한 접근 통제를 통해 데이터 무결성을 보장합니다.

this 키워드

현재 인스턴스 참조를 위한 키워드로 다음 용도가 있습니다:
1. 멤버 변수와 지역 변수 구분
2. 생성자 간 호출
3. 인스턴스 메서드 호출
4. 인스턴스 반환

static 키워드

클래스 수준에서 공유되는 요소를 선언합니다.
- 정적 변수: 모든 인스턴스 공유
- 정적 메서드: 클래스명으로 직접 호출 가능
- 정적 블록: 클래스 로딩 시 초기화

JAR 파일

Java 클래스 라이브러리를 패키징한 배포 형식입니다.

외부 라이브러리

third-party 라이브러리는 JAR 파일 형태로 포함되어 프로젝트에 추가됩니다.

코드 예시


// 사용자 정의 클래스
class 사람 {
    // private 필드
    private String 이름;
    private int 나이;

    // 생성자
    public 사람(String 이름, int 나이) {
        this.이름 = 이름;
        this.나이 = 나이;
    }

    // Getter/Setter
    public String 이름 가져오기() {
        return 이름;
    }

    public void 이름 설정하기(String 이름) {
        this.이름 = 이름;
    }

    public int 나이 가져오기() {
        return 나이;
    }

    public void 나이 설정하기(int 나이) {
        this.나이 = 나이;
    }

    // 인스턴스 메서드
    public void 자기소개() {
        System.out.println("안녕하세요. 제 이름은 " + this.이름 + "이고, 나이는 " + this.나이 + "세입니다.");
    }

    // 정적 메서드
    public static void 인사() {
        System.out.println("안녕하세요, 정적 메서드입니다.");
    }

    // 정적 블록
    static {
        System.out.println("정적 블록 실행 중입니다.");
    }
}

// 실행 클래스
public class 실행클래스 {
    public static void main(String[] args) {
        // 인스턴스 생성
        사람 사용자 = new 사람("김철수", 25);

        // Setter 사용
        사용자.이름 설정하기("박영희");
        사용자.나이 설정하기(30);
        System.out.println(사용자.이름 가져오기() + "님의 나이는 " + 사용자.나이 가져오기() + "세입니다.");

        // 인스턴스 메서드 호출
        사용자.자기소개();

        // 정적 메서드 호출
        사람.인사();

        // 정적 자원 초기화
    }
}

8. 상속

핵심 개념

기존 클래스의 속성과 메서드를 새로운 클래스에 물려주는 기법입니다. 하위 클래스는 상위 클래스의 기능을 확장하거나 재정의할 수 있습니다.

장점 및 단점

장점
- 코드 재사용성 향상
- 계층적 구조 형성
- 다형성 지원

단점
- 의존성 증가
- 유지보수 어려움
- 확장 제한 (단일 상속)

Object 클래스

모든 클래스의 최상위 조상 클래스로, 다음 메서드를 제공합니다:
- equals(): 객체 비교
- hashCode(): 해시 코드 반환
- toString(): 문자열 표현
- clone(): 객체 복제

메서드 재정의

상위 클래스 메서드를 하위 클래스에서 동일한 이름으로 재구현하는 기법입니다.
재정의 규칙:
- 동일한 이름, 반환 타입, 파라미터 목록
- 접근 권한은 상위 메서드보다 넓어야 함
- 체크 예외는 상위 메서드보다 좁게 제한

super 키워드

상위 클래스의 멤버에 접근하기 위한 키워드입니다.
- 상위 클래스 필드/메서드 호출
- 생성자 호출: super() 또는 super(매개변수)

final 키워드

수정 불가능한 요소를 선언합니다.
- 클래스: 상속 금지
- 메서드: 재정의 금지
- 변수: 초기화 후 변경 금지

코드 예시


// 상위 클래스
class 동물 {
    void 먹기() {
        System.out.println("동물이 음식을 먹습니다.");
    }
}

// 하위 클래스
class 개 extends 동물 {
    @Override
    void 먹기() {
        System.out.println("개가 고기를 먹습니다.");
    }

    void 짖기() {
        System.out.println("개가 짖습니다.");
    }
}

public class 실행클래스 {
    public static void main(String[] args) {
        개 반려견 = new 개();
        반려견.먹기(); // 메서드 재정의
        반려견.짖기(); // 하위 클래스 고유 메서드

        // super 키워드 사용
        System.out.println("Object 클래스 메서드: " + 반려견.toString());
    }
}

태그: java OOP 캡슐화 상속 메서드재정의

6월 22일 19:28에 게시됨