[자바]클래스, 객체, 생성자

정원석·2024년 3월 19일

setter, getter 함수

클래스는 새로운 자료형을 만드는 도구이다. 클래스는 상태정보(멤버변수)와 행위정보(멤버메소드)로 이루어져있다.
PersonVO 클래스는 다음과 같다.

public class PersonVO {
    private String name;
    private int age;
    private String phone;
    //setter method
    public void setName(String name){
        this.name=name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public void setPhone(String phone){
        this.phone=phone;
    }
    // getter method
    public String getName(){
        return name; // this.name
    }
    public int getAge(){
        return age; // this.age
    }
    public String getPhone(){
        return phone; // this.name
    }
}

getter, setter 메소드를 이용해 메모리의 private 멤버변수에 데이터를 대입하고 출력할 수 있다. 다음은 메인함수 코드이다.

package fc.java.part3;
import fc.java.model.PersonVO;

public class PersonInfoHide {
    public static void main(String[] args) {
        //Q . 한 사람의 [회원] 정보를 저장할 [객체를 생성]하세요.
        PersonVO vo = new PersonVO();
        vo.setName("홍길동");
        vo.setAge(50);
        vo.setPhone("010-1111-1111");

        //System.out.println(vo.name+"\t"+vo.age+"\t"+vo.phone);
        System.out.println(vo.getName()+"\t"+vo.getAge()+"\t"+vo.getPhone());
    }
}

메인함수에서 PersonVo클래스의 vo 객체를 생성한 후 setter함수로 private멤버변수에 데이터를 대입 후 getter함수로 출력할 수 있다.

생성자를 이용한 데이터 대입

다음은 생성자를 이용한 데이터 대입 클래스이다.

package fc.java.model;

public class PersonVO {
    private String name;
    private int age;
    private String phone;
    //생략된 생성자 메서드가 있다. → 기본생성자(default Constructor)
    public PersonVO(){
        //객체를 생성하는 코드는 내부에서 만들어진다.
        //객체의 초기화를 한다.
        this.name = "홍길동";
        this.age = 50;
        this.phone = "010-1111-1111";
    }
    
    public void setName(String name){
        this.name=name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public void setPhone(String phone){
        this.phone=phone;
    }
    public String getName(){
        return name; // this.name
    }
    public int getAge(){
        return age; // this.age
    }
    public String getPhone(){
        return phone; // this.name
    }
}

생성자는 객체를 초기화 하는 역할을 한다. 여기서 초기화 란 데이터를 대입하는 것을 말한다. 생성자는 클래스와 같은 이름을 사용하며 Person()은 기본생성자이다. 생성자를 이용해 데이터를 출력하는 메인함수 코드는 다음과 같다.

package fc.java.part3;
import fc.java.model.PersonVO;

public class ConstructorInit {
    public static void main(String[] args) {
        // Q . 생성자 메서드를 통해 PersonVO 객체에 이름, 나이, 전화번호를 저장하고 출력하세요.
        PersonVO vo = new PersonVO();
        System.out.println(vo.getName()+"\t"+vo.getAge()+"\t"+vo.getPhone());

        PersonVO vo1 = new PersonVO();
        System.out.println(vo1.getName()+"\t"+vo1.getAge()+"\t"+vo1.getPhone());

        // 개발자가 원하는 값으로 초기화 하는 방법?
    }
}

위의 코드는 vo 객체와 vo1 객체의 출력값이 동일하다. vo와 vo1을 다른 값을 넣고 출력하려면 어떻게 해야 하는가? 오버로딩을 사용하면 된다.

오버로딩

생성자에 오버로딩을 사용하여 인자 매개변수를 추가하여 같은 생성자 이름을 매개변수에 따라 다른 값으로 출력되도록 한다. 다음의 코드를 보자.

package fc.java.model;
public class PersonVO {
    private String name;
    private int age;
    private String phone;
    //생략된 생성자 메서드가 있다. → 기본생성자(default Constructor)
    public PersonVO(){
        //객체를 생성하는 코드는 내부에서 만들어진다.
        //객체의 초기화를 한다.
        this.name = "홍길동";
        this.age = 50;
        this.phone = "010-1111-1111";
    }
    // 생성자의 오버로딩
    public PersonVO(String name, int age, String phone){
        this.name = name;
        this.age = age;
        this.phone = phone;
    }

    // setter method
    public void setName(String name){
        this.name=name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public void setPhone(String phone){
        this.phone=phone;
    }
    // getter method
    public String getName(){
        return name; // this.name
    }
    public int getAge(){
        return age; // this.age
    }
    public String getPhone(){
        return phone; // this.name
    }
}

PersonVO() 기본생성자와 PersonVo(String name, int age, String phone) 를 선언하여 오버로딩을 이용해 객체에 다른 데이터를 초기화 할 수 있다. 다음은 PersonVO클래스를 이용한 메인함수이다.

package fc.java.part3;
import fc.java.model.PersonVO;

public class ConstructorOverloading {
    public static void main(String[] args) {
        // Q . 생성자 메서드를 통해서 PersonVO객체에 원하는 이름, 나이, 전화번호를 저장하고 출력하세요.
        PersonVO vo = new PersonVO();
        PersonVO vo1 = new PersonVO("나길동", 60, "010-2222-2222");
        PersonVO vo2 = new PersonVO("조길동", 40, "010-3333-3333");

        System.out.println(vo.getName()+"\t"+vo.getAge()+"\t"+vo.getPhone());
        System.out.println(vo1.getName()+"\t"+vo1.getAge()+"\t"+vo1.getPhone());
        System.out.println(vo2.getName()+"\t"+vo2.getAge()+"\t"+vo2.getPhone());

    }
}

다음을 출력하면

toString() 메서드로 객체 출력하기

toString() 메서드를 이용하여 객체가 가진 모든 값 리턴 해주기.

    public String toString(){
        return name+"\t"+age+"\t"+phone;
    }

메인 메서드에선 다음과 같이 출력할 수 있다. getter를 이용해 하나씩 동작 메서드를 출력하는것은 번거롭기 때문에 모두 출력할 땐 toString()을 클래스 선언때 만들어 메인에서 사용하면 된다. toString()은 vo.toString(); 에서 생략하고 사용할 수 있다.

package fc.java.part3;
import fc.java.model.PersonVO;
public class ToStringPrint {
    public static void main(String[] args) {
        //Q . 생성자 메서드를 통해 PersonVO객체에 원하는 이름, 나이, 전화번호를 저장하고 toString() 메서드로 출력하세요.
        PersonVO vo = new PersonVO("홍길동", 34, "010-1111-1111");
        System.out.println(vo.getName()+"\t"+vo.getAge()+"\t"+vo.getPhone());
        System.out.println(vo.toString());
        System.out.println(vo); // vo.toString() 생략할 수 있다.
    }
}

메인함수를 출력하면 다음과 같이 출력된다. getter를 사용한 출력과 toString()을 사용한 출력과 생략했을 때 결과가 동일함을 볼 수 있다.

profile
Back-End-Dev

0개의 댓글