[JAVA] 객체지향 - 제어자, 접근 제어자, 캡슐화

2024. 9. 1. 01:26·Back-End/Java

[작성일: 2023. 01. 28]

 

목차

     

    제어자(Modifier)

    • 클래스와 클래스의 멤버 (멤버 변수, 메서드)에 부가적인 의미를 부여하는 것
    접근 제어자 public, protected, (default), private
    그 외            static, final, abstract, native, transient, synchronized, volatile, sticftp

     

    • 하나의 대상에 여러 제어자를 같이 사용 가능
      • 접근 제어자는 하나만 사용 가능
    public class ModifierTest {
      public static final int WIDTH = 200;
      // 제어자 3개 사용
      // 순서는 상관없으나 대부분 접근제어자를 제일 앞에 사용함.
        
      public static void main(String[] args) {
        System.out.println("WIDTH= " + WIDTH);
      }
    }

     

     

     

     

     

    static 

    • 클래스의, 공통적인

     

    제어자 대상 의미
    static 멤버변수 - 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 됨.
    - 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능
    - 클래스가 메모리에 로드될 때 생성됨
    메서드 - 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 됨.
    -  static 메서드 내에서는 인스턴스 멤버들 직접 사용 불가

     

    class StaticTest { // 객체 생성 없이 사용 가능
      static int width = 200;    // 클래스 변수(static 변수), cv
      static int height = 120;	// 클래스 변수(static 변수), cv
        
      static {	// 클래스 초기화 블럭
      // static 변수의 복잡한 초기화 수행
      }
        
      static int max(int a, int b) { 
      // 클래스 메서드(static 메서드)
      // iv, 인스턴스 메서드 사용 불가
        return a > b ? a : b;
      }
    }

     

     

     

    final

    • 마지막의, 변경될 수 없는

     

    제어자 대상 의미
    final 클래스 - 변경될 수 없는 클래스, 확장될 수 없는 클래스가 됨
    - final로 지정된 클래스는 다른 클래스의 조상이 될 수 없음.
    - String, Math, ...
    메서드 - 변경될 수 없는 메서드
    - final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없음.
    멤버변수 - 변수 앞에 final이 붙으면 값을 변경할 수 없는 상수가 됨.
    지역변수

     

    final class FinalTest {    // 조상이 될 수 없는 클래스
      final int MAX_SIZE = 10;	// 값을 변경할 수 없는 멤버변수(상수)
        
      final void getMaxSize() {	
      // 오버라이딩 할 수 없는 메서드(변경 불가)
      final int LV = MAX_SIZE;	
      // 값을 변경할 수 없는 지역변수(상수)
        return MAX_SIZE;
      }
    }

     

     

     

    abstract

    • 추상의, 미완성의
    • 선언부만 있는 클래스(구현부가 없음)
    • 미완성 설계도, 제품 생성 불가
    • 추상클래스를 상속받아서 완전한 클래스를 만든 후에 객체 생성 가능

     

    제어자 대상 의미
    abstract 클래스 - 클래스 내에 추상 메서드가 선언되어 있음을 의미
    메서드 - 선언부만 작성하고 구현부는 작성하지 않은 추상메서드임을 알림.

     

    abstract class AbstractTest { 
    // 추상 클래스(추상 메서드를 포함한 클래스)
      abstract void move(); // 추상 메서드(구현부가 없음)
      // 괄호 {}가 없음
    }
    
    AbstractTest a = new AbstactTest(); 
    // 에러. 추상 클래스는 인스턴스 생성 불가

     

     

     

     

     

     

    접근 제어자(Access Modifier)

    private       같은 클래스 내에서만 접근 가능
    (default)    같은 패키지 내에서만 접근 가능
    protected  같은 패키지 내, 다른 패키지의 자손 클래스에서 접근 가능
    public        접근 제한 없음

     

    제어자 같은 클래스 같은 패키지 자손 클래스
    (다른 패키지)
    전체
    public O O O O
    protected O O O  
    (default) O O    
    private O      

     

    public     class AccessModifierTest {
    (default)  int ic;			// 멤버변수(인스턴스 변수)
               static int cv; // 멤버변수(클래스 변수)	
                
    public            
    protected   void method() {}
    (default)  }
    private

     

     

     

     

     

    캡슐화와 접근 제어자

    • 접근 제어자를 사용하는 이유?
      • 외부로부터 데이터를 보호하기 위해서
    • iv의 외부접근을 막고 메서드(setHour)를 통해 접근하는 것
    • 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해

     

    public class Time {
      private int hour;        // 접근제어자를 private로 하여
      private int minute;      // 외부에서 iv 직접 접근 막음
      private int second;
        
      // 메서드는 public으로 작성
      public int getHour() { return hour; }
      public void setHour(int hour) {
        if (hour < 0 || hour > 23) return;
        this.hour = hour;
      }
    }

     

     

     

     

     

     

     

     

     

     


    🐣 해당 게시글은 자바의 정석(남궁성 님) 영상으로 함께 공부하며 요약/정리한 글입니다.
    🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.

     

    저작자표시 비영리 변경금지 (새창열림)
    'Back-End/Java' 카테고리의 다른 글
    • [JAVA] 객체지향 - 다형성
    • [JAVA] 객체지향 - 오버라이딩
    • [JAVA] 객체지향 - import
    • [JAVA] 객체지향 - 패키지
    뚜비
    뚜비
    1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
    • 뚜비
      뚜비의 개발로그
      뚜비
    • 전체
      오늘
      어제
    • 글쓰기     관리
      • Devlog
        • Back-End
          • Java
          • Spring
          • JPA
          • HTTP
          • Security
          • Back-End
          • Front-End
        • 알고리즘
        • iOS
          • Swift
        • Database
        • Tips
          • Git & GitHub
          • A to Z
        • 프로젝트
        • 생각정리
    • 태그

      Database
      게시판만들기
      스프링
      최주호
      객체
      데이터베이스
      jsp
      성능최적화
      변수
      html
      의존성주입
      자바스크립트
      다형성
      알고리즘
      Security
      Java
      생성자
      Swift
      sql
      HTTP
      자바
      프로그래머스
      javascript
      Spring Security
      JPA
      MVC
      김영한
      백준
      DB
      spring
    • hELLO· Designed By정상우.v4.10.0
    뚜비
    [JAVA] 객체지향 - 제어자, 접근 제어자, 캡슐화
    상단으로

    티스토리툴바