[section 1] 객체지향 프로그래밍 심화(1) - 상속, 캡슐화

수경·2022년 11월 7일
0

코드스테이츠

목록 보기
14/57

상속

부모 클래스의 멤버를 자식 클래스가 재사용 하는 것

방법

  • extends 키워드 사용
    ➡️ [접근 제한자] class [자식 클래스] extends [부모 클래스]
  • 자식 클래스에서 부모 클래스의 메소드를 오버라이딩 할 수 있음
    ✔️ 오버라이딩 : 상위 클래스로부터 상속받은 메소드와 동일한 이름의 메소드를 재정의 하는 것 ↔️ 오버로딩
    ❗️메소드의 시그니처가 같아야함
    ❗️접근 제어자의 범위가 상위 클래스의 메소드와 같거나 더 넓어야 함
    ❗️예외는 상위클래스의 메소드보다 많이 선언할 수 없음

  • 자바에서는 다중 상속을 지원하지 않음! 단일 상속만 가능

  • supersuper()
    기본적으로 this, this() 와 같음
    super : 부모 클래스의 인스턴스를 가리킴
    super() : 부모 클래스의 생성자를 호출 ➡️ 자식 클래스의 생성자에서만, 가장 첫 줄에 작성해야 함

public class Person() {
	String name;
    int age;
    int id;
    
    // 생성자
    Person() {
    	System.out.println("Person's constructor");
    }
    
    void eat() {
    	System.out.println("person eats");
    }
}

//Person 클래스를 상속받은 Programmers 클래스
public class Programmer() extends Person{ 
	int level;
    int id;
    
    // 생성자
     Programmer() {
     	// 부모 클래스의 생성자 호출
     	super();
    	System.out.println("Programmer's contructor");
    }
    
    // overriding
    void eat() {
		System.out.println("programmer eats");
	}
    
	void coding() {
    	System.out.println("coding is my life");
        // Programmer의 id를 Person의 id 값으로 저장
        this.id = super.id;
    }
}

Object 클래스

자바의 최상위 클래스

아무것도 상속받지 않은 클래스에 자동 상속됨

ex) toString() , equals(object obj) , hashCode() , wait() , nofify()


캡슐화

패키지

클래스와 인터페이스의 묶음

  • 클래스를 그룹 단위로 묶어서 관리하기 때문에 효과적임
  • 자바에서의 패키지 ➡️ 디렉토리 ➡️ 계층구조를 이룸 (. 으로 구분)
  • 충돌 방지 기능 : 같은 이름의 클래스더라도 패키지가 다르면 다른 클래스로 인식
  • 기본 패키지 : java.lang , java.util , java.io

선언

  • 패키지의 이름이 없는 경우 이름 없는 패키지에 속함
  • 패키지의 이름이 있는 경우 파일의 맨 첫 번째 줄에 선언
    package practice.test;

import 문

다른 클래스 내의 패키지를 사용하기 위한 선언문

  • 변수명이 길어지는 것 방지 ➡️ 가독성 향상

선언

패키지와 클래스 구문 사이에 작성
import practice.test


접근 제어자

클래스나 인터페이스의 접근을 제한하기 위해 사용하는 키워드

접근 제어를 설정함으로써 데이터를 보호하고, 데이터의 불필요한 노출을 방지(정보 은닉)할 수 있음 ➡️ 캡슐화 !

  • private : 같은 클래스 내에서만 접근 가능
  • protect : 같은 패키지 + 다른 패키지의 자식 클래스에서 접근 가능
  • default : 같은 패키지
  • public : 모두 허용


Getter, Setter

캡슐화로 보호/은닉된 데이터를 읽거나 변경하는 방법

public class Person() {
	private String name;
}

public class Worker() {
	public String getName() {
    	return name;
    }
    
    public void setName(String name) {
    	this.name = name;
        System.out.println(this.name);
    }
}

public class Main() {
	public class main() {
		Worker w = new Worker();
        w.setName("Kim");
        w.getName();	// Kim
	}
}

회고

오늘은 엄청나게 어렵진 않았다. 그래도 나름 자바를 4탕한 사람의 여유인가...ㅋ.............. 좋은 건지... ㅋ

혼자 getter / setter 를 공부할 때는 그냥 그런갑다~ 편하게 사용할라고 그런갑다 했는데 아무데나 쓰는 게 아닌 걸 오늘 알았다. 캡슐화 관련해서 쓰는 거였구만..... 그저 데이터 읽고 쓰는 건 무조건 getter / setter 를 통해서 하라고 구현한 건줄.....

profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글