[Java] 객체지향 프로그래밍 - 제어자

2024. 4. 5. 12:27·Language/Java

 

제어자

제어자는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다.

 

접근 제어자

  • public
  • protected
  • default
  • private

그 외

  • static
  • final
  • abstract
  • native, transient, synchronized, volatile, strictfp

클래스나 멤버변수와 메서드에 주로 사용되며, 여러 제어자를 조합하여 사용하는 것이 가능

단, 한번에 네 가지 중 하나만 선택해서 사용가능

즉, 하나의 대상에 대해서 public과 private을 함께 사용할 수 없다

 

 

static - 클래스의, 공통적인

인스턴스 변수는 하나의 클래스로부터 생성되었더라도 각기 다른 값을 유지하지만,

클래스변수(static 멤버 변수)는 인스턴스에 관계없이 같은 값을 갖는다

 

그 이유는 하나의 변수를 모든 인스턴스가 공유하기 때문

 

static이 붙은 멤버변수와 메서드, 그리고 초기화 블럭은 인스턴스가 아닌 클래스에 관계된 것이기 때문에

인스턴스를 생성하지 않고도 사용가능하다 

 

인스턴스 멤버를 사용하지 않는 메서드는 static 메서드로 선언하는 것이

인스턴스를 생성하지 않고도 호출이 가능해서 더 편리하고 속도도 빠르다

 

 

final - 마지막의, 변경될 수 없는

거의 모든 대상에 사용될 수 있다

변수에 사용되면 값을 변경할 수 없는 상수가 되며

메서드에 사용되면 오버라이딩을 할 수 없게되고

클래스에 사용되면 자식클래스를 정의하지 못해 확장할 수 없다

 

 

abstract - 추상의, 미완성의

메서드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상 메서드를 선언하는데 사용

클래스에 사용되어 클래스에 추상 메서드가 존재한다는 것을 알수있다

 

 

 

 

접근 제어자

멤버 또는 클래스에 사용되어, 해당하는 메버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다

  • private - 같은 클래스 내에서만 접근이 가능
  • default - 같은 패키지 내에서만 접근이 가능
  • protected - 같은 패키지 내에서, 그리고 다른 패키지의 자식클래스에서 접근이 가능
  • public - 접근 제한이 없음

범위가 넓은 쪽에서 좁은 쪽으로 나열하면 다음과 같다

public > protected > (default) > private

접근 제어자를 이용한 캡슐화

접근 제어자를 사용하는 이유는 클래스 내부에 선언된 데이터를 보호하기 위해서이다

이것을 데이터 감추기라고 하며, 객체지향개념의 캡슐화에 해당하는 내용

 

접근제어자를 사용하는 이유

외부로부터 데이터를 보호하기 위해
외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해

 

public class Time {
    private int hour;
    private int minute;
    private int second;

    public int getHour(){
    	return hour;
    }

    public void setHourt(int hor) {
        if(hour < 0 || hour > 23)
        	return;
        this.minute = minute;
    }
    
	public int getMinute(){
    	return minute;
    }

    public void setMinute(int minute) {
        if(minute < 0 || minute > 59)
        	return;
        this.minute = minute;
    }
        
	public int getSecond(){
    	return second;
    }

    public void setSecond(int second) {
        if(second < 0 || second > 59)
        	return;
        this.second = second;
    }
    
}

 

get으로 시작하는 메서드는 단순히 멤버변수의 값을 반환하는 일을 하고,

set으로 시작하는 메서든느 매개변수에 지정된 값을 검사하여 조건에 맞는 값일 때만 멤버변수의 값을 변경하도록 작성

 

만약 상속을 통해 확장이 예상되는 클래스는 private 대신 protected를 사용한다

 

이 규칙은 Getter/Sertter 라고 한다

 

 

 

 

제어자의 조합

제어자를 조합해서 사용할 때 주의사항

 

1. 메서드에 static과 abstract를 함께 사용할 수 없다

static 메서드는 몸통이 있는 메서드에만 사용할 수 있기 때문

 

2. 클래스에 abstract와 final을 동시에 사용할 수 없다

클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고

abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순되기 때문

 

3. abstract 메서드에 접근 제어자가 private일 수 없다

abstract 메서드는 자식클래스에서 구현해주어야 하는제 접근 제어자가 private이면

자식 클래스에서 접근할 수 없기 때문

 

4. 메서드에 private과 fianl을 같이 사용할 필요는 없다

접근 제어자가 private인 메서든느 오버라이딩될 수 없기 때문이다

이 둘 중 하나만 사용해도 의미가 충분함

저작자표시 (새창열림)

'Language > Java' 카테고리의 다른 글

[Java] 인터페이스  (0) 2024.04.18
[Java] 객체지향 프로그래밍 - 다형성과 추상클래스  (0) 2024.04.08
[Java] 객체지향 프로그래밍 - package와 import  (0) 2024.04.05
[Java] 객체지향 프로그래밍 - 오버라이딩(overriding)  (0) 2024.04.05
[Java] 객체 지향 프로그래밍 - 상속  (0) 2024.04.03
'Language/Java' 카테고리의 다른 글
  • [Java] 인터페이스
  • [Java] 객체지향 프로그래밍 - 다형성과 추상클래스
  • [Java] 객체지향 프로그래밍 - package와 import
  • [Java] 객체지향 프로그래밍 - 오버라이딩(overriding)
soyeon26
soyeon26
  • soyeon26
    개발 일지
    soyeon26
  • 전체
    오늘
    어제
    • 분류 전체보기 (107)
      • Web (22)
        • Web (1)
        • HTTP (0)
      • Language (29)
        • Java Script (3)
        • Type Srcipt (1)
        • Java (25)
      • Front (19)
        • HTML+CSS (4)
        • React (15)
      • Back (41)
        • Spring(Springboot) (9)
        • JSP (21)
        • Database (5)
        • NestJS (6)
      • Devops (6)
        • Docker (1)
        • Git & SVN (5)
      • App (7)
        • Android (7)
      • IT 정보 (3)
  • 블로그 메뉴

    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백엔드
    sql강의
    React
    김영한
    SQL강의 추천
    React Next.js
    SSR
    csrvsssr
    Next.js
    강의후기
    과학기술인 등록번호 발급
    Java
    과학기술인 등록
    인프런
    springboot
    과학기술인번호 조회
    Spring
    과학기술인 번호 발급
    javascript
    중복제거
    서블릿
    csr과ssr의 차이
    Next.js 필요성
    데이터베이스 강의
    강의 후기
    자바스크립트set
    과학기술인등록번호 조회
    프론트엔드
    스프링부트
    java의 정석
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
soyeon26
[Java] 객체지향 프로그래밍 - 제어자
상단으로

티스토리툴바