package com.sukgi.access;
//접근제어자 Access Modigiers
/*
* 자바에서는 접근제어자를 통해 각 api의 접근 권한을 제한할 수 있습니다.
* 어렵지 않습니다.
*
* 아래는 접근제어자의 범위를 크기 순서대로 나열해 둔 것입니다.
*
* public > protected > default(비어있는것) > private
*
* 이 중 public은 이미 보았습니다.(모두 접근 가능이라는 의미)
*
* public : 가장 넓은 범위로써 패키지 제한 없이 모두 접근 가능한 상태
*
* protected : 같은 패키지에서 접근 가능,
* 다른 패키지에서는 상속받은 자식 클래스/ 인터페이스일 결우 가능
*
* default : 아무것도 안 붙은 형태
* 아무런 접근 제한을 두지 않을 때
* 같은 패키지 내에서 접근 가능
* 다른 패키지에서 접근 불가
*
* private : 같은 패키지X, 다른 패키지X, 오직 내 클래스에서만 가능
*
* 접근제한자는 클래스명과 생성자, 메소드, 필드에 모두 사용 가능합니다.
* 단, 클래스에서는 public과 default만 가능합니다.
* 293P
* ===============================================================================
* 클래스 내부 | 동일 패키지 | 하위 클래스 | 그외
* public O O O O
* protected O O O X
* default O O X X
* private O X X X
*
* */
class Apple{
private String name; //이름 저장
int age; // 나이 저장
private Apple() {} // 생성장/오직 클래스 내부에서만 사용 가능
static Apple getInstance() {
return new Apple(); //정적 메서드/ Apple 클래스의 새로운 인스턴스를 반환
}
void print() {
System.out.println("저는 "+ name + "입니다.");//name 쓸 수 있다.
}
void setName(String name) {//setter 저장하기-> 이름을 설정하는 고개된 메서드
this.name = name;
}
String getName() {//getter 가져오기 // 이름을 반환하는 공개된 메서드
return name;
}
void setAge(int age) { // 나이를 설정하는 고개된 메서드/ 음수인 경우 기본값 1로 설명
if(0>age) {
this.age=1;
}else {
this.age=age;
}
}
int getAge() { // 나이를 반환하는 고개된 메서드
return age;
}
}
public class AccessModifiers {
public static void main(String[] args) {
Apple a = Apple.getInstance(); // 정적 메서드 getInstance 를 사용하여 Apple 클래스의 인스턴스를 생성
//a.name="3PO";//name 쓰지 못한다.
a.setName("3PO"); //'name'을 설정하는 공개된 메서드를 사용
String name = a.getName(); //'name'을 가져오는 공개된 메서드를 사용
System.out.println(name);
}
}
3PO
이 코드는 캡슐화를 통해 private 필드를 안전하게 유지하고, 공개된 메서드를 통해 필드에 접근하고 수정하는 방법을 보여줍니다
캡슐화(Encapsulation)는 객체 지향 프로그래밍(OOP)의 한 원칙으로, 관련된 데이터와 메서드를 하나의 단위로 묶고, 그 내부의 세부 구현을 외부로부터 감추는 것을 의미합니다. 이는 정보 은닉(Information Hiding)이라고도 불립니다. 캡슐화는 프로그램의 모듈성을 높이고 코드의 재사용성을 증가시키며, 코드의 유지보수성을 향상시키는 데 기여합니다.
'2023.11.21-2024.05.31' 카테고리의 다른 글
231218 JAVA static01(인스턴스 멤버, 정적 멤버) (0) | 2023.12.19 |
---|---|
231218 JAVA Human AM02(접근제어자 연습) (0) | 2023.12.19 |
231218 JAVA jinMaker (0) | 2023.12.19 |
231215 JAVA Test01 (1) | 2023.12.15 |
231215 JAVA Human (0) | 2023.12.15 |