자바 - 접근 수정자
자바 프로그래머로서의 미래에 오신 것을 환영합니다! 오늘, 우리는 자바의 접근 수정자의 세계로 흥미로운 여행을 떠날 것입니다. 프로그래밍에 새로운 사람이라도 걱정하지 마세요 – 저는 여러분을 단계별로 이 개념을 안내해 드리겠습니다. 여러분의 좋아하는 음료수를 들고 편하게 앉아서, 함께 빠져들어봅시다!
접근 수정자란 무엇인가요?
시작하기 전에, 우리는 나무집을 지을 때를 상상해 봅시다. 그곳에 누구든지 올라가서 여러분의 멋진 것들을 망치고 싶지 않을 텐데요, 정확히 이것이 자바에서 접근 수정자가 하는 일입니다 – 코드의 다른 부분에 대한 접근을 제어합니다.
자바에서는 네 가지 주요 접근 수정자가 있습니다:
수정자 | 클래스 | 패키지 | 서브클래스 | 세계 |
---|---|---|---|---|
public | 예 | 예 | 예 | 예 |
protected | 예 | 예 | 예 | 아니요 |
default (수정자 없음) | 예 | 예 | 아니요 | 아니요 |
private | 예 | 아니요 | 아니요 | 아니요 |
이제, 하나씩 살펴보겠습니다.
기본 접근 수정자
기본 수정자는 어떤 수정자도 지정하지 않았을 때 얻는 것입니다. 나무집 문을 잠그지 않고 두는 것과 같아요 – 동네 사람들(패키지)만 들어올 수 있습니다.
class DefaultExample {
int x = 5;
void printX() {
System.out.println(x);
}
}
이 예제에서는 x
와 printX()
는 같은 패키지 내에서만 접근할 수 있지만, 그 밖에서는 접근할 수 없습니다.
Private 접근 수정자
Private은 가장 제한적인 수정자입니다. 나무집에 비밀 상자를 가지고 only you know about it.
public class PrivateExample {
private int secretNumber = 42;
private void whisperSecret() {
System.out.println("The secret number is: " + secretNumber);
}
public void revealSecret() {
whisperSecret();
}
}
여기서, secretNumber
과 whisperSecret()
는 PrivateExample
클래스 내에서만 접근할 수 있습니다. 우리는 그 밖에서 직접 접근할 수는 없지만, revealSecret()
와 같은 공개 메서드를 사용하여 상호작용할 수 있습니다.
Protected 접근 수정자
Protected는 가족에게 여분의 열쇠를 주는 것과 같아요. 같은 패키지 내에서 접근할 수 있고, 서브클래스에도 접근할 수 있어요, 단 그 서브클래스가 다른 패키지에 있더라도요.
public class Animal {
protected String name;
protected void makeSound() {
System.out.println("The animal makes a sound");
}
}
public class Dog extends Animal {
public void bark() {
name = "Buddy"; // 보호된 멤버에 접근
makeSound(); // 보호된 메서드 호출
System.out.println(name + " says: Woof!");
}
}
이 예제에서, Dog
는 Animal
의 보호된 멤버에 접근할 수 있어요.因为它是一个子类.
Public 접근 수정자
Public은 가장 열려있는 수정자입니다. 나무집을 공공 공원에 두는 것과 같아요 – 누구나 어디서나 접근할 수 있어요.
public class PublicExample {
public int shareableNumber = 100;
public void sayHello() {
System.out.println("Hello, World!");
}
}
shareableNumber
과 sayHello()
는 클래스에 따라 다를 수 있지만, 패키지와 관계없이 접근할 수 있습니다.
접근 수정자와 상속
상속에 대해 이야기할 때, 접근 수정자는 중요한 역할을 합니다. 예제를 살펴보겠습니다:
public class Vehicle {
private String engine = "Generic Engine";
protected int wheels = 4;
public String brand = "Generic Brand";
void startEngine() {
System.out.println("Starting " + engine);
}
}
public class Car extends Vehicle {
public void describeCar() {
// System.out.println(engine); // 이것은 오류를 일으킬 것입니다
System.out.println("Wheels: " + wheels); // 보호된 것은 접근할 수 있습니다
System.out.println("Brand: " + brand); // 공개된 것은 접근할 수 있습니다
startEngine(); // 기본(패키지-비공개)은 같은 패키지 내에서 접근할 수 있습니다
}
}
이 예제에서, Car
는 Vehicle
를 상속받지만, private engine
변수에 직접 접근할 수 없습니다. 하지만, 보호된 wheels
, 공개된 brand
, 그리고 기본 startEngine()
메서드(같은 패키지라고 가정하에)에 접근할 수 있습니다.
올바른 수정자를 선택하기
올바른 접근 수정자를 선택하는 것은 나무집에 누구를 초대할지 결정하는 것과 같아요. 간단한 가이드를以下합니다:
- 같은 클래스 내에서만 접근해야 하는 것에는
private
를 사용하세요. - 서브클래스에서 접근해야 하는 것에는
protected
를 사용하세요. - 어디서나 접근해야 하는 것에는
public
를 사용하세요. - 같은 패키지 내에서만 접근해야 하는 것에는 기본(수정자 없음)을 사용하세요.
기억해요, 가능한 한 가장 제한적인 수정자를 사용하는 것이 일반적인 좋은 관행입니다. 이 개념을 "캡슐화"라고 합니다 – 코드를 안전하고 깔끔하게 유지하는 것과 같아요.
결론
접근 수정자는 자바에서 코드의 가시성과 접근성을 제어하는 기본적인 개념입니다. 우리의 프로그래밍 나무집의 자물쇠와 열쇠로, 우리가 누가 무엇을 볼 수 있고 사용할 수 있는지 결정할 수 있게 해줍니다.
자바의 여행을 계속할수록, 이 수정자들을 더 많이 사용하게 될 것입니다. 처음에는 좀 무겁겠지만, 연습을 통해 자연스럽게 될 것입니다. 기억해요, 모든 전문가는 처음엔 초보자였습니다, 여러분처럼요!
따라서, 계속 코딩하고 실험하고, 가장 중요한 것은 자바 나무집을 지을 때 즐기세요! 알 수 없는 일이죠? 언젠가는 다른 사람들이 자신의 나무집을 어떻게 지을지 가르쳐 줄 수도 있을 테니까요. 코딩을 즐기세요!
Credits: Image by storyset