Backend

<Backend> Java / Class (3) 접근제한자와 변수의 타입

이게왜 2024. 4. 4. 17:25

2024.04.04 - [IT] - Java / Class (2) this와 메서드

 

<Backend> Java / Class (2) this와 메소드

2024.04.04 - [IT] - Java / Class (1) Java / Class (1) Class 를 어느 정도 진행함에 따라 공부를 병행하려 합니다. JAVA 기초 학습 React를 사용하며 심화학습 JAVA 기반 학습 순으로 학습을 진행하겠습니다. 이번

rezerocodinglife.tistory.com

지난 글에 이어 Class에 대해 알아보겠습니다.

 

이번에는

  • 접근제한자
  • 변수의 타입

을 알아보겠습니다.

 

파이팅!!!


1. 접근 제한자

접근 제한자(Access Modifier)는 말 그대로 접근을 제한하기 위해 사용됩니다.

어떤 경우에는 클래스와 인터페이스를 다른 패키지에서 사용하지 못하도록 막을 필요가 있습니다. 

또한 객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 필드나 메서드를 사용하지 못하도록 막아야 되는 경우도 있습니다.

이때 접근 제한자를 사용할 수 있습니다. 

 

접근 제한자는 public, protected, private default가 있습니다.

 

  • public : 외부 클래스에서 자유롭게 접근 가능
  • protected : 같은 패키지 또는 자식 클래스에서 접근 가능
  • private : 외부에서 접근 불가능
  • default : 같은 패키지에 소속된 클래스에서만 접근 가능


2. 변수의 타입

class에서 다루는 변수의 타입은 "선언 위치"에 따라 분류됩니다.

여기서 다룰 변수의 종류들입니다.

  • 전역 변수 (필드)
  • 클래스 변수
  • 인스턴스 변수
  • 지역 변수
  • 매개 변수

전역 변수 (필드)

전역 변수는 클래스 내부에 선언되지만 메서드 밖에서 정의되는 변수입니다.

클래스 어느 곳에서나 접근이 가능합니다.

  • 클래스 영역에 선언된 변수로, "클래스변수, 인스턴스변수"를 통틀어 칭한다.
  • 클래스 어디서나 접근 가능
public class GlobalVariableExample {
  
    private int globalVar = 10;   // 전역 변수

    public void modifyGlobalVar() {
        globalVar = 20; // 전역 변수의 값 변경
    }
}

* 전역 변수는 일반적으로 private, public, protected와 같은 접근 제한자로 선언됩니다.


클래스 변수

클래스 변수는 static 선언되는 전역 변수의 한 유형입니다.

public class ClassVariableExample {

    static int classVar = 100;     // 클래스 변수

    public static void main(String[] args) {
        System.out.println(ClassVariableExample.classVar); // 클래스 변수 접근
    }
}

* 클래스 변수도 마찬가지로 private로 선언되면 클래스이름으로 직접 접근할 수 없습니다.


인스턴스 변수

인스턴스 변수는 클래스 내부에 선언되지만 객체가 생성될 때 각각의 객체마다 별도로 할당되는 변수입니다.

각 객체의 상태를 나타내는 데 사용됩니다.

public class Person {
    private static String species = "인간"; // 클래스 변수로 선언
    private String name; // 인스턴스 변수
    private int age; // 인스턴스 변수

    // 생성자를 통한 초기화
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getter 메서드
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public static String getSpecies() {
        return species;
    }

    public static void main(String[] args) {
        // Person 객체 생성
        Person person1 = new Person("홍길동", 30);
        Person person2 = new Person("김영희", 25);

        // 객체의 속성 출력
        System.out.println(person1.getName() + "의 나이: " + person1.getAge() + ", 종: " + Person.getSpecies());
        System.out.println(person2.getName() + "의 나이: " + person2.getAge() + ", 종: " + Person.getSpecies());
    }
}

* 객체를 생성할 때 공통적인 속성이라면 클래스 변수로 선언하는 것이 효율적일 수 있습니다.


지역 변수

지역 변수는 특정한 메서드, 생성자 또는 블록 내에서 선언되고 사용되는 변수입니다.

지역변수는 해당 블록을 벗어나면 사용할 수 없으며, 메서드 또는 블록이 실행될 때 생성되고 실행이 완료되면 소멸됩니다.

또한 다른 메서드나 블록에서 접근할 수 없습니다.

public class LocalVariableExample {
    public void calculateSum() {
        // 메서드 내의 지역변수 선언
        int num1 = 10;
        int num2 = 20;
        int sum = num1 + num2;
        System.out.println("두 수의 합: " + sum);
    }

    public void printMessage() {
        // 다른 메서드 내의 지역변수 선언
        String message = "안녕하세요!";
        System.out.println(message);
    }

    public static void main(String[] args) {
        // 블록 내의 지역변수 선언
        int count = 5;
        for (int i = 0; i < count; i++) {
            System.out.println("현재 카운트: " + i);
        }
        // 여기서는 i에 접근할 수 없음
    }
}

매개변수

매개변수는 메서드나 생성자에 전달되는 값을 받기 위해 사용되는 변수입니다.

메서드를 호출할 때 전달된 값이 메서드 내에서 매개변수로 받아지게 됩니다.

매개변수는 메서드난 생성자의 괄호 안에 선언되며, 메서드 내에서 지역변수처럼 사용됩니다.

public class ParameterExample {
    // 매개변수를 사용한 메서드
    public void greetUser(String name) { // formal parameter
        System.out.println("안녕하세요, " + name + "님!");
    }

    // 여러 개의 매개변수를 사용한 메서드
    public int add(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) {
        ParameterExample example = new ParameterExample();

        // 매개변수를 사용한 메서드 호출
        example.greetUser("홍길동"); // actual parameter

        // 여러 개의 매개변수를 사용한 메서드 호출
        int result = example.add(3, 5);
        System.out.println("두 수의 합: " + result);
    }
}

'Backend' 카테고리의 다른 글

<Backend> Spring / QueryDSL  (0) 2024.07.09
<Backend> Java / 상속  (0) 2024.04.05
<Backend> Java / Class (2) this와 메소드  (0) 2024.04.04
<Backend> Java / Class (1) 클래스와 생성자  (0) 2024.04.04
<Backend> Java / Thread (2)  (0) 2023.11.10