최원종의 개발 블로그

get, set 메서드 본문

Java/Java 객체지향

get, set 메서드

chl6698 2026. 2. 26. 12:39

상태 변경 원칙

객체의 상태(멤버 변수)는 외부에서 직접 수정하지 않고, 오직 행위(메서드)를 통해서만 변경해야 함

 

getter와 setter

setter : 외부 값을 검증하여 데이터의 오염을 방지하는 역할

getter: 객체의 데이터를 안전하게 읽어오는 방법


getter, setter 코드 실습

-클래스 설계(Warrior)

package ch10;

public class Warrior {
    private String name;
    private int level;
    private int hp;

    public Warrior(String name) {
        this.name = name;
        this.level = 1;
        this.hp = 100;
    }

    //레벨 업
    public void levelUp() {
        this.level++;
        this.hp += 50;
        System.out.println(name + "민이 레벨 업!" + " 현재 레벨 " + level + " HP " + hp);
    }

    //체력 변경
    //잘못된 수정을 막는 Setter 메서드 만들기 ( 검증 로직)
    //멤버 변수에 상태를 단순히 변경할 때 setXX 메서드로 이름을 설계한다.
    public void setHp(int hp) {
        //체력은 0보다 작을 수 없고, 현재 레벨에서 가질 수 있는 최대치를 넘을 수 없음
        //1 --> 100
        //2 --> 200
        //3 --> 300
        int maxHp = level * 100;
        if (hp < 0 || hp > maxHp) {
            System.out.println("경고 비정상적인 체력 수정 시도 [" + hp + "] 수치를 거부합니다");
            return;
        }
        this.hp = hp;

    }

    //setter 메서드라 부를 수 있다
    public void setName(String name) {
        //name.length() --> "홍길동" --> 글자 수를 반환
        if (name.length() <= 3) {
            System.out.println("캐릭터의 이름은 3글자 이상이어야 합니다");
            return;
        }
        this.name = name;
    }

    //getter 메서드를 알아보자 : 현재 상태를 안전하게 전달
    public int getHp() {
        return this.hp;
    }

    public int getLevel() {
        return this.level;
    }
}

 

-실행( GameMain)

package ch10;

public class GameMain {

    public static void main(String[] args) {

        Warrior warrior1 = new Warrior("최강전사");

        //시나리오 1: 정상적인 게임 플레이 (메서드를 통한 상태 변경)
        System.out.println("---- 정상 플레이 ----");
        warrior1.levelUp();//레벨 2 , 체력 150

        //시나리오 2: 악의적인 데이터 수정 시도
        //warrior1.hp = 9999; // private - 접근불가
        warrior1.setHp(200);
        System.out.println(warrior1.getHp());
        System.out.println(warrior1.getLevel());
    }//end of main

}//end of class
더보기
결과화면

getter, setter메서드 만들기(Dog)

package ch10;

public class Dog {

    //멤버 변수 3개 이상 만들어주기
    private String name;
    private int age;
    private String gender;

    public Dog(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;

    }
    //get, set 메서드를 각각 만들어주세요

    public void setName(String name) {
        this.name = name;

    }

    public void setAge(int age) {
        if (age < 0) {
            System.out.println("나이는 0살보다 작을 수 없습니다");
        }
        this.age = age;
    }

    public void setGender(String gender) {
        this.gender = gender;

    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getGender() {
        return gender;
    }
}

 

실행코드

package ch10;

public class DogMainTest {
    public static void main(String[] args) {
        Dog dog1 = new Dog("뽀삐", 5, "수컷");
        dog1.showInfo();
    }
}
더보기
출력결과화면

 

'Java > Java 객체지향' 카테고리의 다른 글

static함수  (1) 2026.02.26
static키워드 이해  (0) 2026.02.26
this 예약어 사용 방법 3가지  (0) 2026.02.25
접근 제어 지시자 (access modifier)  (0) 2026.02.25
객체지향 프로그래밍(객체간 상호작용)  (1) 2026.02.25