✔️ 접근 제어자(Access Modifier)란?
객체 지향 프로그래밍에서 클래스의 멤버(필드, 메서드, 내부 클래스 등)에 대한 접근 권한을 제어하는 속성이다.
접근 제어자는 클래스의 캡슐화, 정보 은닉, 보안성 등을 관리하고 조절하는 데 사용된다.
다른 클래스나 코드에서 해당 멤버에 접근할 수 있는지 여부를 결정하며,
코드의 모듈화와 유지 보수를 도와준다.
주요 접근 제어자에는 일반적으로 다음과 같은 네 가지 종류가 있다.
1. public
public 접근 제어자는 해당 멤버가 어떤 클래스든 접근 가능하도록 허용한다.
다른 클래스에서도 자유롭게 접근할 수 있으며, 해당 멤버에 대한 외부 공개 인터페이스를 제공할 때 사용된다.
• public 클래스와 메서드
public 접근 제어자를 사용하여 클래스나 메서드를 선언하면 다른 클래스에서
해당 클래스나 메서드에서 쉽게 접근할 수 있다.
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}
• public 필드
public 접근 제어자를 사용하여 필드를 선언하면 해당 필드에 직접 집근하여 값을 읽거나 변경할 수 있다.
public class Circle {
public double radius; // 반지름 필드
}
• public 상수
public static final을 함께 사용하여 상수를 정의하면 다른 클래스에서 해당 상수를 사용할 수 있다.
public class Constants {
public static final double PI = 3.141592653589793;
}
• public 인터페이스
public 접근 제어자를 사용하여 인터페이스를 선언하면 해당 인터페이스를 구현하는 클래스에서
인터페이스의 메서드를 구현할 수 있다.
public interface Shape {
public double calculateArea();
}
• public 생성자
클래스의 생성자를 public으로 선언하면 다른 클래스에서 해당 클래스의 객체를 생성할 수 있다.
public class Person {
public String name;
public Person(String name) {
this.name = name;
}
}
2. protected
protected 접근 제어자는 동일한 패키지 내의 클래스와 서브 클래스에서 접근 가능하도록 허용한다.
또한 다른 패키지에서 서브클래스로 상속받은 경우에도 접근이 가능하다.
주로 상속 관계에서의 멤버 보호와 확장을 위해 사용된다.
• protected 필드
protected 접근 제어자를 사용하여 필드를 선언하면 동일 패키지 내의 클래스와 서브클래스에서 접근할 수 있다.
package com.example;
public class Animal {
protected String name;
protected void eat() {
System.out.println(name + " is eating.");
}
}
package com.example;
public class Dog extends Animal {
public void play() {
System.out.println(name + " is playing.");
}
}
• protected 메서드
protected 접근 제어자를 사용하여 메서드를 선언하면 동일 패키지 내의 클래스와 서브 클래스에서
메서드를 호출할 수 있다.
package com.example;
public class Shape {
protected double area;
protected double calculateArea() {
return 0.0;
}
}
package com.example;
public class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
protected double calculateArea() {
return Math.PI * radius * radius;
}
}
• protected 생성자
생성자를 protected로 선언하면 동일 패키지 내의 클래스와 서브 클래스에서 객체를 생성할 수 있다.
package com.example;
public class Vehicle {
protected String type;
protected Vehicle(String type) {
this.type = type;
}
}
package com.example;
public class Car extends Vehicle {
public Car(String type) {
super(type);
}
}
3. default(package-private)
접근 제어자를 명시하지 않은 경우, 해당 멤버는 기본 접근 제어자를 가진다.
default 접근 제어자는 동일한 패키지 내에서만 접근 가능하도록 제한한다.
다른 패키지의 클래스에서는 접근할 수 없다.
• default 생성자
클래스나 멤버(필드, 메서드)를 별도의 접근 제어자 없이 선언하면 default 접근 제어자가 적용된다.
이 경우, 같은 패키지 내에서만 접근할 수 있다.
package com.example;
class Employee {
String name;
int salary;
void displayInfo() {
System.out.println("Name: " + name + ", Salary: " + salary);
}
}
• default 클래스 내의 내부 클래스
default 접근 제어자를 사용하여 내부 클래스를 선언하면 같은 패키지 내의 다른 클래스에서 내부 클래스에 접근할 수 있다.
package com.example;
public class Outer {
class Inner {
// 내부 클래스의 구현
}
}
• default 인터페이스
인터페이스를 별도의 접근 제어자 없이 선언하면 해당 인터페이스는 같은 패키지 내의 클래스에서만 구현할 수 있다.
package com.example;
interface Printable {
void print();
}
4. private
private 접근 제어자는 해당 멤버가 선언된 클래스 내에서만 접근 가능하도록 제한한다.
다른 클래스에서는 접근할 수 없으며, 정보 은닉을 구현하고 내부 구현을 숨기는 데 사용된다.
• private 필드
private 접근 제어자를 사용하여 필드를 선언하면 해당 클래스 내에서만 접근할 수 있다.
public class Student {
private String name;
private int age;
// Getter와 Setter를 통해 접근 가능하게 할 수 있음
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// ...
}
• private 메서드
private 접근 제어자를 사용하여 메서드를 선언하면 해당 클래스 내에서만 해당 메서드를 호출할 수 있다.
public class Calculator {
private int add(int a, int b) {
return a + b;
}
public int addAndMultiply(int a, int b, int multiplier) {
int sum = add(a, b);
return sum * multiplier;
}
}
• private 내부 클래스
클래스 내에서 private 접근 제어자를 사용하여 내부 클래스를 선언하면 해당 클래스 내부에서만
해당 내부 클래스를 사용할 수 있다.
public class Outer {
private class Inner {
// 내부 클래스의 구현
}
public void doSomething() {
Inner inner = new Inner();
// 내부 클래스에 접근 가능
}
}
➕ 필드(filed)란?
객체 지향 프로그래밍에서 클래스 내부에 선언된 변수를 나타낸다.
클래스의 멤버로써 데이터를 저장하거나 객체의 상태를 나타내는 역할을 한다.
필드는 객체의 속성이나 특징을 표현하는 데이터를 저장하며, 해당 클래스의 모든 객체 인스턴스가 공유하게 된다.
필드의 특징과 역할은 다음과 같다.
1. 데이터 저장
필드는 클래스의 내부에 데이터를 저장하는 용도로 사용된다.
객체의 상태 정보나 속성 값을 유지하고 다루는 데 사용된다.
2. 속성 표현
객체의 속성이나 특징을 필드를 통해 표현할 수 있다.
예를 들어, "사람" 클래스의 name, age, address 와 같은 속성들은 필드로 표현될 수 있다.
3. 상태 유지
필드는 객체의 상태를 유지하며, 객체의 다양한 동작에서 필요한 정보를 저장한다.
객체의 메서드들은 이러한 필드 값을 사용하여 동작을 수행한다.
4. 접근 제어
필드는 접근 제어자를 통해 외부로부터 접근을 제어할 수 있다.
public, protected, private, default 접근 제어자 등을 사용하여 필드의 접근 범위를 지정할 수 있다.
5. 값 변경
필드는 메서드 내에서 값을 변경하거나 반환하는 데 사용된다.
객체의 행위를 제어하거나 객체 간의 상화작용을 담당하는 데에도 필드가 활용될 수 있다.
클래스 내에서 필드를 정의할 때, 필드의 타입과 이름을 지정하여 선언한다.
필드의 초기값을 할당하거나 생성자 등을 통해 값을 설정할 수 있다.
필드는 객체의 속성을 표현하며, 객체 간의 차이를 나타내거나 공통된 데이터를 저장하는 역할을 수행한다.
public class Person {
private String name;
private int age;
private String address;
// Getter와 Setter 메서드를 통해 필드에 접근할 수 있음
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// ...
}
'JAVA' 카테고리의 다른 글
객체지향언어란? (0) | 2023.08.17 |
---|---|
메서드(Method)란? (0) | 2023.08.17 |
형변환(casting) (자동 형변환, 강제 형변환) (0) | 2023.08.15 |
변수에 대해서 (0) | 2023.08.11 |
public static void main(String[] args) 무슨 의미지? (0) | 2023.08.10 |