본문 바로가기
Java

클래스 메서드 접근 제어자

by cactus의 잔잔한 이야기 2025. 2. 6.
반응형

객체란 '의사나 행위가 미치는 대상'입니다. 사람, 건물, 자동차 등이 우리 주변에 있는 객체라고 할 수 있습니다. 즉 눈에 보이는 물건은 모두 객체라고 할 수 있다는 거죠. 어떤 행동을 나타내는 단어도 객체가 될 수 있습니다. 자바는 이런 객체를 기반으로 하는 객체 지향 프로그램입니다. 그렇다면 객체 지향 프로그래밍의 핵심 개념 중 하나인 클래스란 무엇일까요?

클래스란?

클래스는 객체의 속성과 기능을 코드로 구현한 것입니다. 클래스를 정의한다는 것은 특정 객체의 구조와 동작 방식을 정하는 것입니다.

다음 예제를 한 번 살펴보겠습니다.

public class Student {
    int id;        // 학번
    String name;   // 이름
    int grade;     // 학년
}

클래스는 class 예약어를 사용하여 선언합니다. 클래스의 이름은 대문자로 시작하는 것이 관례입니다. 위 예제에서는 Student라는 클래스를 정의하고 멤버 변수로 학번, 이름, 학년 속성을 가지고 있습니다.

멤버 변수는 해당 객체가 가지는 속성이며 속성의 유형에 따라 적절한 자료형을 사용해야 합니다. 예를 들어, 학번과 학년은 정수형(int), 이름은 문자열(String)로 선언되었습니다. 이 외에도 학생의 나이, 키, 주소 등을 속성으로 추가할 수도 있습니다.

메서드란?

메서드는 특정 기능을 수행하는 코드 블록을 의미합니다. 함수의 한 종류인 메서드는 객체 지향 프로그래밍에서 매우 중요한 역할을 합니다. 다음은 메서드의 예제입니다.

public int add(int val1, int val2) {
    int result = val1 + val2;
    return result;
}

위 메서드는 val1과 val2의 값을 받아 더한 후 결괏값을 반환합니다. 메서드를 사용하는 이유는 다음과 같습니다:

  1. 코드의 재사용성을 높임 - 동일한 기능 반복해서 사용 가능
  2. 코드의 가독성을 높임 - 프로그램의 흐름 이해 용이
  3. 유지보수 용이성 증가 - 오류 수정이 용이

메서드는 매개변수를 받아서 사용할 수도 있고 특정 값을 반환하는 것도 가능합니다. 메서드 이름은 의미를 명확히 하고 기능과 관련 있는 단어를 사용하는 것이 좋습니다.

정보 은닉과 접근 제어자

객체 지향 프로그래밍에서는 데이터 보호를 위해 정보 은닉 기법을 사용합니다. 정보 은닉이란 클래스 내부에 있는 멤버 변수를 외부에서 직접 접근하지 못하도록 제한합니다. 다만 필요한 경우에는 메서드를 통해 접근할 수 있도록 합니다.

자바에서는 접근 제어자를 사용해서 접근 범위를 제어할 수 있습니다. 주요 접근 제어자는 다음과 같습니다:

  1. public : 어디서든 접근 가능
  2. private : 클래스 내부에서만 접근 가능
  3. protected : 같은 패키지 및 상속받은 클래스에서 접근 가능
  4. (default, 지정하지 않음) : 같은 패키지 내에서만 접근 가능

예를 들어, 학생의 정보를 안전하게 관리하기 위해 private 접근 제어자를 사용할 수 있습니다.

public class Student {
    private int id;
    private String name;
    private int grade;
    
    // Getter 메서드
    public int getId() {
        return id;
    }
    
    public String getName() {
        return name;
    }
    
    public int getGrade() {
        return grade;
    }
    
    // Setter 메서드
    public void setId(int id) {
        this.id = id;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public void setGrade(int grade) {
        this.grade = grade;
    }
}

여기서 get() 메서드는 멤버 변수의 값을 가져올 수 있도록 해주고 set() 메서드는 값을 넣어주는 역할을 합니다. 이러한 접근 방식은 필요한 경우에만 안전하게 값을 변경할 수 있고 외부에서는 변수를 직접적으로 수정할 수 없도록 보호해 줍니다. 

객체 생성과 활용

클래스를 정의하고 나서는 이를 프로그램에서 사용해야겠죠. 그러려면 객체를 생성해야 합니다. 자바에서는 객체를 생성하려면 new 키워드를 사용해야 합니다.

public class Main {
    public static void main(String[] args) {
        Student student1 = new Student(); // Student 객체 생성
        student1.setId(001);
        student1.setName("전우치");
        student1.setGrade(1);
        
        System.out.println("학번 : " + student1.getId());
        System.out.println("이름 : " + student1.getName());
        System.out.println("학년 : " + student1.getGrade());
    }
}

위 코드에서는 Student라는 클래스 객체를 생성하고 set()을 사용하여 데이터를 넣어준 후에 get() 을 사용하여 데이터를 반환해 주고 있습니다.

결론

자바는 객체를 기반으로 한 프로그래밍 언어입니다. 클래스와 객체를 사용하여 코드의 재사용성 높이고 데이터를 효율적으로 관리할 수 있습니다. 또한 메서드를 사용하여 유지보수성을 높이고 정보 은닉을 통해 데이터 보호할 수 있습니다.

반응형

'Java' 카테고리의 다른 글

배열 ArrayList  (0) 2025.02.06
조건문과 반복문  (0) 2025.02.04
기본 연산자와 비트 연산자  (0) 2025.02.03
변수와 자료형  (0) 2025.02.02