본문 바로가기
✨ Java/클래스 (Class)

자바(JAVA) - 클래스 (Class) - 2 Setter와 Getter 그리고 toString()

by 환풍 2023. 2. 7.
728x90
Setter와 Getter에 대해서 알아보려고한다.
간단히 말해보자면 Setter 메소드는 값을 변경해주는 것, Getter는 리턴, 반환해주는 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//이름, 주소, 나이 데이터를 가지는 사람 클래스가 있다.
public class Person {
 
    String name;
    String adress;
    int age;
 
    // 매개변수로 들어온 값으로 이름을 변경하는 메소드
    public void setName(String name1)
    {
        name = name1;
    }
 
    // 매개변수로 들어온 값으로 나이를 변경하는 메소드
    public void setAge(int age1)
    {
        age = age1;
    }
 
    //이름, 나이, 주소 정보를 모두 출력하는 메소드
    public void printPersonInfo()
    {
        System.out.println("이름 : " + name );
        System.out.println("나이 : " + age );
        System.out.println("주소 : " + adress );
    }
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", adress='" + adress + '\'' +
                ", age=" + age +
                '}';
    }
}
 
cs

Person 클래스에 이름(name), 주소(adress), 나이(age)를 자료형에 맞게 변수를 만들어주었다.

이후 setName처럼 set ~~ 가 바로 setter (세터)라고 불린다.

setName뒤에 있는 String name1은 매개 변수이다.

setName의 메소드안에 있는 name = name1;로 인해 Person 클래스 변수 name의 값이 변경된다는 뜻이다. 

 

하지만 메소드가 많아진다면 이름을 계속해서 바꾸어주어야하고, 무슨 메소드에서 원하는 값을 바꾸어주는지 헷갈릴 수 있다.

이해를 위해 이렇게 썼지만, 보편적으로 name = name1; 이아닌 this.name = name으로 쓰게 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//이름, 주소, 나이 데이터를 가지는 사람 클래스가 있다.
public class Person {
 
    String name;
    String adress;
    int age;
 
    // 매개변수로 들어온 값으로 이름을 변경하는 메소드
    public void setName(String name)
    {
        this.name = name;
    }
 
    // 매개변수로 들어온 값으로 나이를 변경하는 메소드
    public void setAge(int age)
    {
        this.age = age;
    }
 
    //이름, 나이, 주소 정보를 모두 출력하는 메소드
    public void printPersonInfo()
    {
        System.out.println("이름 : " + name );
        System.out.println("나이 : " + age );
        System.out.println("주소 : " + adress );
    }
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", adress='" + adress + '\'' +
                ", age=" + age +
                '}';
    }
}
 
cs

위와같이 this.name = name;으로 사용해주어야 한다.

이때 this.name은 클래스에서 선언된 변수 name이고,

= 뒤에 있는 name은 메소드의 매개변수 name이라는 점이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
public class PersonTest {
    public static void main(String[] args) {
        Person p1 = new Person();
 
        //p1의 이름, 나이 값이 변경
        p1.name = "박주홍";
        p1.age = 28;
        
        //p1 객체의 모든 정보 출력
        System.out.println("이름 : " + p1.name);
        System.out.println("나이 : " + p1.age);
        System.out.println("주소 : " + p1.adress);
        System.out.println();
 
        //Person 클래스에 대한 객체 p2생성
        Person p2 = new Person();
 
        //p2 객체의 이름, 나이를 변경.
        p2.setName("김길동");
        p2.setAge(22);
        //p2 객체의 모든 정보 출력.
        p2.printPersonInfo();
        System.out.println(p2.toString());
    }
}
 
cs

main 메소드에서 출력시켜줄 수 있다.

이곳에서 Person 클래스에 있는 p1 객체를 생성해주면 Person클래스를 끄집어내서 사용할 수 있다.

주석 처리된 것과 같이 객체의 모든 정보를 출력하려고한다면 상당한 노가다 작업 일것이다.

이때 방법은 Person클래스에 있는 printPersonInfo( ) 와 같이 메소드를 정의해주는 방법도 있지만,

100개가 넘는 변수를 지정해주어야 한다면 끔찍할 것이다.

 

이때 편하게 사용되는 것이 바로 toString( )이다.

toString( )은 객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메소드이다.

 

반응형

댓글