ABOUT

성능과 운영 안정성을 함께 끌어올리는 개발자입니다.

92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링 IT

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

ComputerScience

Development

Engineering

Trouble Shooting

GUESTBOOK

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

SUBSCRIBE

최신소식을
편하게 만나보세요.

기타 제어자

 
 

 제어자

제어자에는
접근 제어자기타 제어자가 있습니다.

What ?

기타 제어자

💡 클래스, 메서드, 변수, 생성자 선언 시 특정 동작 또는 속성을 부여합니다.

💡 클래스, 메서드 그리고 변수에 사용 가능한 기타 제어자가 정해져 있습니다.

How ?

기타 제어자

💡 선언부에 기타 제어자를 추가해 동작을 정의합니다.
public class Example {
  public static int test  = 7;
  private volatile boolean isTrue;
  
  public synchronized void start() {
      isTrue = true;
  }
}​


종류

static

💡 필드, 메서드, 초기화 블록, 중첩 클래스 선언부에 사용합니다.

 

💡 객체 단위의 변수가 아닌 클래스 공통의 속성을 제어하고 규정하기 위해 사용합니다.

 

💡 해당 클래스의 모든 객체가 값을 공유합니다.

 

💡 메모리에 한 번만 로드되며, 모든 객체가 공유합니다.

 

💡 객체가 아닌 클래스 이름으로 접근합니다. 

 

💡 정의된 멤버는 클래스에 속하며, 객체를 생성하지 않고도 사용할 수 있습니다

 

인스턴스변수는 하나의 클래스로부터 생성되었더라도 각기 다른 값을 유지하지만, 클래스변수는 인스턴스에 관계 없이 같은 값을 가진다.

 

💡 static 예시

public class Example {
    static int count = 0; // 클래스 변수

    static void displayCount() { // 클래스 메서드
        System.out.println("Count: " + count);
    }
}

Example.displayCount(); // 객체 없이 호출 가능

 

final

💡 클래스, 메소드, 필드, 지역 변수 선언부에 사용합니다.

 

💡 값이나 동작을 변경할 수 없게 만드는 제어자입니다.

 

💡 final 예시

public final class ImmutableClass {
  // 클래스 선언은 상속이 불가
}
public class Parent {
  public final void display() {
   // 메서드 선언은 재정의 불가
  }
}
public class Constants {
  public static final double PI = 3.14159;
  // 필드, 변수는 값 변경 불가(상수)
}

 

abstarct

💡 클래스, 메소드 선언부에 사용합니다.

 

💡 구체적이지 않고 설계만 정의되어 있습니다.

 

💡 구현은 서브클래스에서 이루어집니다.

 

💡  abstract 예시

/* 추상 클래스는 인스턴스화할 수 없고,
   추상 메서드를 포함하거나 상속으로 사용 */
public abstract class Animal {
  // 추상 메서드
  public abstract void makeSound(); 
}

// 추상 메서드는 서브클래스에서 구현
public class Dog extends Animal {
  @Override
  public void makeSound() {
    System.out.println("Bark");
  }
}

 

synchronized

💡 메서드, 코드 블록 선언부에 사용합니다.

 

💡  동시에 하나의 스레드만 접근 가능해 동기화와 일관성을 보장합니다.

 

💡 성능에 영향을 줄 수 있으므로 필요할 때만 사용합니다.

💡  synchronized 예시

public class Counter {
  private int count = 0;
  // 동기화 메서드
  public synchronized void increment() { 
    count++;
  }
}

 

transient

💡 필드(변수) 선언부에 사용합니다.

 

💡  직렬화시 민감한 정보나 불필요한 데이터를 제외할 때 사용합니다.

 

💡 필드는 객체가 직렬화될 때 저장되지 않습니다.

 

💡 네트워크 전송 또는 파일 저장 시 데이터를 보호할 수 있습니다.

 

💡  synchronized 예시

import java.io.Serializable;

public class User implements Serializable {
    private String username;
    private transient String password; // 직렬화 제외

    // 생성자와 기타 메서드
}

 


 

적용 대상

종류 적용 대상
static 필드, 메서드중첩 클래스
abstract 클래스, 메서드
final 클래스, 메서드변수
synchronized 메서드, 코드 블록
native 메서드,
strictfp 클래스, 메서드
volatile 필드
transient 필드

 


Why ?

접근 제어자

💡 소프트웨어 개발을 돕기 위해 제공되는 재사용 가능한 구조나 틀을 제공하는 프로그램입니다.

💡 이를 통해 핵심 비즈니스 로직이나 창의적인 부분에 집중해 개발할 수 있습니다.


728x90