Java - 제어자, 캡슐화

춤추는개발자·2022년 9월 25일
0

Java 정리

목록 보기
14/59

제어자(modifier)

  • 클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여
  • 접근 제어자는 클래스,변수,메소드,생성자에 대한 접근 권한을 지정하는 역할을 한다.
  • 접근 제어자 : public,protected,default,private (동시에 사용 불가능 하나만 사용 가능)
  • 그외 : static,final,abstract 등
  • 하나의 대상에 여러 제어자를 같이 사용 가능 합니다. 단 접근 제어자는 하나만 사용 가능 합니다.

static

  • 멤버변수
    • 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다.
    • 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능
    • 클래스가 메모리에 올라갈 때 생성
  • 메서드
    • 인스턴스(객체)를 생성하지 않고도 호출이 가능한 static 메서드,클래스 메서드가 된다.
    • static 메서드 내에서는 인스턴스 변수,메서드를 사용할 수 없다.

final

  • 클래스
    • 변경될 수 없는 또는 확장할 수 없는 클래스로 지정할 때 final을 붙인다.
    • final로 지정한 클래스는 다른 클래스의 조상이 될 수 없고 이 말은 상속이 불가능하다는 뜻이다.
  • 메서드
    • 변경될 수 없는 메서드로 지정할 때 사용하고 오버라이딩으로 메서드를 재정의 할 수 없게된다.
  • 멤버 변수, 지역 변수
    • 변수 앞에 final을 지정하면 상수가 되어 값을 변경할 수 없다.

대표적인 final 클래스는 String,Math 등이 있다.

abstract

  • 클래스
    • 클래스 내에 추상 메서드가 선언되어 있음을 의미 합니다.
    • 추상클래스는 추상 메서드를 포함한 클래스이다.
    • 추상클래스는 미완성 클래스이기 때문에 인스턴스 생성이 불가하다.
    • 추상 클래스를 상속 받아서 완전한 클래스를 만든 후에 인스턴스 생성이 가능하다.
  • 메서드
    • 선언부만 작성하고 구현부는 작성하는 않는 추상 메서드임을 의미 합니다. 추상 메서드는 구현부가 없는 메서드이다.

접근 제어자

  • private : 같은 클래스 내에서만 접근이 가능하다.
  • default : 같은 패키지 내에서만 접근이 가능하다.
  • protected : 같은 패키지 내에서 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.
  • public : 접근 제한이 전혀 없다.

클래스 접근 제한자

👉 public : 어디서든 인스턴스 생성이 가능하다.
👉 default : 동일 패키지로 묶인 클래스 내에서만 인스턴스 생성을 허용한다.

멤버 접근 제한자

  • public
  • protected
  • default
  • private

멤버 접근 제한자 예시 코드

👉 멤버 접근 제한자의 사용 예를 직접 코드로 보면서 이해 해보자.

class A {
private int a;
int b;
protected c;
public int d;
}

public class Test{
     public state void main(String args[]) {
   A n = new A();

   n.a = 10; // private 변수는 다른 클래스에서 접근 불가능하다.
   n.b.= 20; // default 변수는 접근 가능
   n.c = 30; // protected 변수는 접근 가능
   n.d = 40; / public 변수는 접근 가능

private를 사용해서 변수를 선언하면 같은 클래스 내에서만 사용 가능하고 default,protected를 사용한 변수는 같은 패키지 내에서는 다른 클래스 내에서 사용이 가능하다. 추가적으로 protected를 사용한 변수는 다른 패키지에서도 자식 클래스이면 사용이 가능하다.
public을 사용한 변수는 어디서든 사용 가능하다.

접근 제어자를 사용하는 이유는 무엇일까?

  • 외부로부터 데이터를 보호하기 위해서 입니다.
  • 접근 제어자를 private를 사용하여 외부에서 인스턴스 변수에 접근하지 못하도록 하고 메서드를 통해서만 인스턴스 변수에 접근하도록 설계한다. 메서드의 역할은 데이터가 접근해도 판단을하여 원하지 않는 데이터는 차단하도록 하는 역할을 한다.
  • 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서 사용 합니다.

💡 접근자에게 매개 변수를 통하여 잘못된 값이 넘어올경우, 이를 사전에 차단 할 수 있고 이것이 우리가 정보은닉을 해야하는 이유다.

👉기억해야 할 것

  1. class 안에서 모든 인스턴스 변수는 무조건 private를 사용
  2. 모든 변수에 대해서는 getter,setter 함수를 만들어서 값을 읽고 쓸 것. ( 메소드를 통해 값을 검증해서 유요한 값만 사용하기 위해서)
  3. 한개의 파일 안에는 2개의 public class 가 불가능. JVM의 진입의 기준인 main 빼고는 public 불가. 파일 하나당 하나의 class 만들기. 자바 파일 한개당 public 클래스는 하나만 만들 수 있고 그 클래스는 파일명과 똑같은 클래스여야 함. 이유는 가독성 또는 main 을 빨리 찾기 위해.

0개의 댓글