본문 바로가기
Java/문법

Java 접근 제어자 private, protected, public

by ssury94 2024. 12. 15.
 
 
 

OOP(Object-Oriented Programming)의 4대 원칙

  • 캡슐화 (Encapsulation): 객체의 데이터와 그 데이터를 처리하는 메서드를 하나로 묶어 외부에서 직접 접근할 수 없도록 하는 것입니다. 이를 통해 데이터의 무분별한 변경을 방지하고 객체의 안정성을 높입니다.
  • 상속 (Inheritance): 기존의 클래스를 기반으로 새로운 클래스를 생성하는 기능으로, 코드의 재사용성을 높이고 중복된 코드 작성을 줄입니다. 예를 들어, '동물' 클래스에서 '포유류' 또는 '조류' 클래스를 파생시킬 수 있습니다.
  • 다형성 (Polymorphism): 같은 이름의 메서드가 서로 다른 형태로 동작할 수 있는 능력입니다. 이는 메서드 오버로딩과 오버라이딩을 통해 구현되며, 유연한 코드 작성을 가능하게 합니다.
  • 추상화 (Abstraction): 복잡한 시스템을 단순화하여 필요한 특성만을 강조하는 것입니다. 예를 들어, 자동차 객체를 표현할 때 엔진, 바퀴 등의 주요 특성만을 강조하고 나머지 세부 사항은 생략할 수 있습니다.

클래스의 멤버에 대한 접근 범위를 지정하는 키워드

 

public

어디서든 접근 가능
클래스 외부에서도 자유롭게 사용

import entity.Clothing;
import entity.Electronics;

public class ProductTest {
    public static void main(String[] args) {


        // 매개변수가 있는 생성자를 사용하여 Electronics 객체 생성
        // productId: "E001", name: "Smart TV", price: 1200000,
        // brand: "삼성전자", warrantyPeriod: 24
        Electronics specificElectronicProduct=new Electronics("E001", "Smart TV", 1200000, "삼성전자", 24);

protected

해당 클래스 내부와 상속받은 자식 클래스에서 접근 가능
외부 클래스에서는 접근 불가

package entity;

public abstract class Product {
    protected String productId;
    protected String name;
    protected double price;

 

private

해당 클래스 내부에서만 접근 가능
외부 클래스나 상속받은 클래스에서 접근불가

가장 강력한 정보 은닉을 제공

package entity;

public class Clothing extends Product{
    private String size;
    private String material;

private 멤버에 접근하려면?

getter와 setter 메서드를 사용하여 private 멤버에 간접적으로 접근할 수 있다.
예: getStudentName(), setStudentName(String name)

public String getSize() {
    return size;
}

public void setSize(String size) {
    this.size = size;
}

public String getMaterial() {
    return material;
}

public void setMaterial(String material) {
    this.material = material;
}

 

왜 구분해서 사용할까?

정보 은닉(캡슐화)을 위해서.

이를 통해 의도치 않은 코드 수정을 방지하고 객체 간 간섭을 최소화할 수 있다!