[STUDY] 231211 | Java | 클래스(Class), Setter/Getter 메소드, 생성자

Nimgnos·2023년 12월 14일
0

👾 STUDY

목록 보기
19/40
post-thumbnail

💻 클래스(Class)

클래스 : 객체를 만들기 위한 설계도

  • 프로그래밍 언어에 따른 분류
    1) 절차지향 방식(작성한 코드의 첫 줄~마지막 줄)
    2) 객체지향 방식
  • 클래스의 구성요소 : 변수, 메소드의 정의(기능), 생성자
  • 클래스는 사용자 정의 자료형

📌 변수의 선언위치에 따른 분류

  • 지역변수(local variable): 메소드 안에서 선언된 변수
    • 반드시 초기화 작업을 진행한 후 사용 가능
  • 매개변수(parameter): 메소드 정의문의 소괄호 안에서 선언된 변수
  • 멤버변수/필드: 클래스 안에서 선언된 변수
    • 초기화 하지 않으면 자동으로 default 초기값을 가짐

💻 Setter, Getter 메소드

  • 객체 지향 프로그래밍에서 객체 데이터는 객체 외부에서 직접적으로 접근하는 것을 막음. ➡ 객체 지향 프로그래밍에서는 메소드를 통해 데이터를 변경하는 방법을 선호함.

📌 Setter 메소드

  • 외부에서 메소드에 접근하여 조건에 맞을 경우 데이터 값을 변경할 수 있도록 함.
  • 데이터는 외부에서 접근하지 않도록 막고, 메소드는 공개해서 외부에서 메소드를 통해 데이터에 접근하도록 유도함.(메소드는 매개값을 검증해서 유효한 값만 데이터로 저장할 수 있기 때문)

📌 Getter

  • 설정한 변수 값, 외부에서 객체의 데이터를 읽을 때 사용하는 메소드
  • 경우에 따라 객체 외부에서 필드 값을 사용하기가 부적절한 경우가 발생할 수 있는데, 이러한 경우에는 값을 가공한 이후에 외부로 전달하는 역할을 함.

✨ setter 메소드를 사용하여 데이터의 값을 저장, getter 메소드를 통해 데이터 값을 불러와 변수에 담아 출력!

💻 생성자

  • 생성자(Constructor)는 객체가 생성될때 자동으로 호출되는 특수 목적의 멤버함수(메소드)로 객체의 초기화를 위해 사용됨.
  • 생성자의 특징
    • 생성자의 이름은 클래스 이름과 동일해야 함.
    • 다른 멤버함수(메소드)와는 다르게 리턴 타입이 없음.
    • 객체가 생성될때 자동으로 한번 호출됨. 
    • 매개변수 조건에 따라 여러개를 작성할 수 있음.(오버로딩)
    • 클래스에 최소 1개는 있어야 하며, 생성자 코드가 없을 경우 컴파일러가 기본생성자를 자동으로 생성함.(*생성자 코드가 1개라도 작성되어 있다면, 컴파일러는 기본생성자가 없다고 하더라도 기본생성자를 자동으로 생성하지 않음.)

📌 클래스(Class) 예제 풀이

예제 1.

public class Phone {
    //phone이 가진 데이터 - 변수로 표현
    String brand; //null
    int price; //0
    String modelName; //null
    //phone이 가진 기능 - 메소드의 정의
    public void powerOn(){
        System.out.println("폰의 전원을 켭니다.");
    }
    public void poerOff(){
        System.out.println("폰의 전원을 끕니다.");
    }
}    
//단순 코드 실행을 위한 클래스
public class PhoneTest1 {
    public static void main(String[] args) {
        //Phone 클래스(설계도) 대로 실체(객체)를 만들어야 함.
        //객체를 생성하는 문법
        //클래스명 객체명 = new 클래스명();
        //new: 새로운 객체를 만들라는 명령
        Phone p1 = new Phone(); //p1이라는 Phone 객체
        //객체가 가진 데이터 읽기
        //객체명.변수명
        System.out.println(p1.brand);
        System.out.println(p1.price);
        System.out.println(p1.modelName);
        //객체가 가진 데이터 수정
        p1.brand = "삼성";
        p1.price = 10000;
        p1.modelName = "갤럭시";
        //phone이 가진 메소드 호출
        p1.powerOn();
        p1.poerOff();
    }
}
public class PhoneTest2 {
    public static void main(String[] args) {
        //객체는 여러개 생성 가능
        Phone p1 = new Phone();
        Phone p2 = new Phone();
        p1.price = 5000;
        System.out.println(p1.price);
        System.out.println(p2.price);
    }
}

예제 2.

  • Car 클래스는 현실세계에서의 자동차를 class로 표현한 것이다. 다음 문제를 읽고 Car 클래스를 완성해 보세요.
    • 자동차는 제조사, 차이름, 차량번호, 가격, 소유주의 속성을 가지고 있다. 이 속성을 가진 Car 클래스를 선언해 보세요.
    • 자동차의 속성을 변경하는 메소드를 만들어보세요.
    • 자동차의 속성을 출력하는 메소드를 만들고, 새로운 클래스를 만들어 7,8번에서 만든 메소드가 잘 동작되는지 확인하세요.
public class Car {
    //자동차는 제조사, 차이름, 차량번호, 가격, 소유주의 속성을 가지고 있다. 이 속성을 가진 Car 클래스를 선언해 보세요.
    String brand;
    String carName;
    String carNum;
    int price;
    String prop;
    //자동차의 속성을 변경하는 메소드를 만들어보세요.
    //setter
    // - 클래스가 가진 데이터 각각의 값을 매개변수로 변경하는 메소드
    // - set 데이터명으로 메소드명이 정해져있음!
    public void setBrand(String brand1){
        brand = brand1;
    }
    public void setCarName(String carName1){
        carName = carName1;
    }
    public void setCarNum(String carNum1){
        carNum = carNum1;
    }
    public void setPrice(int price1){
        price = price1;
    }
    public void setProp(String prop1){
        prop = prop1;
    }
    //모든 멤버변수를 한 번에 변경하는 메소드
    public void setCarInfo(String brand1, String carName1, String carNum1, int price1, String prop1){
        brand = brand1;
        carName = carName1;
        carNum = carNum1;
        price = price1;
        prop = prop1;
    }
    //자동차의 속성을 출력하는 메소드를 만들고, 새로운 클래스를 만들어 7,8번에서 만든 메소드가 잘 동작되는지 확인하세요.
    public void showInfo(){
        System.out.println("제조사 : " + brand);
        System.out.println("차이름 : " + carName);
        System.out.println("차량번호 : " + carNum);
        System.out.println("가격 : " + price);
        System.out.println("소유주 : " + prop);
    }
}
public class CarTest1 {
    public static void main(String[] args) {
        //자동차의 속성을 출력하는 메소드를 만들고, 새로운 클래스를 만들어 7,8번에서 만든 메소드가 잘 동작되는지 확인하세요.
        Car c1 = new Car();
        Car c2 = new Car();
        //c1 차량에 대한 정보 변경
        c1.setBrand("현대");
        c1.setCarName("아반떼");
        c1.setCarNum("0000");
        c1.setPrice(5000);
        c1.setProp("김자바");
        c1.showInfo();
        //c2 차량에 대한 정보 변경
        //메소드를 호출할 때는 메소드명이 일치! + 매개변수의 정보
        //매개변수 정보: 매개변수의 개수, 매개변수의 자료형
        c2.setCarInfo("기아", "k3", "2222", 10000, "이자바");
        c2.showInfo();
    }
}

예제 3.

  • 회원정보를 관리하기 위한 Member 클래스를 아래 문제를 풀어 완성하세요.
    • 회원정보로는 이름, 아이디, 비밀번호, 나이를 관리할 것이다. 이 데이터를 가지는 클래스를 만들어 보세요.
    • 회원 등록을 위한 메소드를 만들어보세요.
    • 등록한 회원의 정보를 확인하기 위한 메소드를 만들어 보세요.
    • 회원의 이름을 변경하기 위한 메소드를 만들어보세요.
    • 이름 변경이 잘 됬는지 확인하기 위한 이름 출력 메소드를 만들어보세요.
      그리고 9 ~ 13번으로 클래스를 잘 구성했는지 확인하기 위해 객체를 만들어 확인하세요.
public class Student {
    //데이터: 이름, 나이, 학번, 점수
    String name;
    int age;
    String stuNum;
    int score;
    //기능
    //매개변수로 전달된 이름값으로 name값을 변경하는 메소드 setName
    public void setName(String name1){
        name = name1;
    }
    //매개변수로 전달된 나이로 age값을 변경하는 메소드 setAge
    public void setAge(int age1){
        age = age1;
    }
    //매개변수로 전달된 나이로 stuNum값을 변경하는 메소드 setstuNum
    public void setStuNum(String stuNum1){
        stuNum = stuNum1;
    }
    //매개변수로 전달된 나이로 score값을 변경하는 메소드 setScore
    public void setScore(int score1){
        score = score1;
    }
    //기능
    //1. 학생의 모든 정보를 출력하는 showInfo() 메소드 구현
    public void showInfo(){
        System.out.println("이름 : "+ name);
        System.out.println("나이 : "+ age);
        System.out.println("학번 : "+ stuNum);
        System.out.println("점수 : "+ score);
    }
}
public class StudentTest1 {
    public static void main(String[] args) {
        //학생 객체 s1 생성
        Student s1 = new Student();
        //학생이 가진 모든 정보를 출력
        s1.showInfo();
        //s1 학생이름을 홍길동으로 변경
        s1.name = "홍길동";
        s1.setName("홍길동");
        //점수 변경
        //데이터를 직접 컨트롤하면 잘못된 데이터가 들어가는
        //문제가 발생했을 때 대처할 방법이 없음.
        s1.score = 80;
        s1.setScore(80);
    }
}

예제 4.

  • 아래의 문제를 풀면서 사람을 표현하는 Man 클래스를 만들어보자.
    • Man 클래스는 이름, 나이, 주소를 멤버로 가지고 있다. 모든 멤버를 선언하세요.
    • 멤버 모두의 값을 초기화 할 수 있는 메소드를 만드세요,
    • 멤버 각각의 값을 변경하는 메소드를 3개를 만드세요.
    • 각 멤버의 값을 리턴하는 메소드를 3개 만드세요.
    • 멤버의 모든 정보를 출력하는 메소드를 만드세요.
    • Man 클래스로 객체를 만들어 위에서 만든 메소드가 잘 작동되는지 테스트하세요.
public class Man {
    String name;
    int age;
    String addr;
    //생성자 : 클래스가 가진 변수의 값을 초기화하는 용도
    //생성자는 리턴 타입이 없음. 반드시 클래스명과 동일!
    //생성자는 메소드의 일종이다.
    public Man(){
        name = "지정되지 않음";
        age = 0;
        addr = "정보가 없음";
    }
    //모든 멤버 초기화 메소드
    public void initMan(String name, int age, String addr){
        this.name = name;
        this.age = age;
        this.addr = addr;
    }
    //멤버 모두의 값을 초기화 할 수 있는 메소드를 만드세요,
    //this. -> 이 클래스에서 정의된
    //setter -> 우클릭/ganerate/setter를 통해 빨리 생성 가능
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setAddr(String addr) {
        this.addr = addr;
    }
    //각 멤버의 값을 리턴하는 메소드를 3개 만드세요.
    //getter -> 우클릭/ganerate/getter를 통해 빨리 생성 가능
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
    public String getAddr() {
        return addr;
    }
    public void printInfo(){
        System.out.println("이름 : " + name);
        System.out.println("나이 : " + age);
        System.out.println("주소 : " + addr);
    }
}
public class ManTest {
    public static void main(String[] args) {
        //객체 생성 문법
        //클래스명 객체명 = new 생성자();
        Man m = new Man(); //생성자는 객체를 호출할 때 한 번만 사용
        //초기화: 제품이 생산되면 가장 먼저 값을 세팅하는 작업
        //     : 제품이 만들어지면 초기에 딱 한 번만!
        //m.initMan("홍길동", 20, "울산");
        m.printInfo();
    }
}

예제 5.

  • 입출금 계좌 만들기
//계좌정보
public class Account {
    String owner;
    int balance; //예금액
    String accNumber; //1111-2222
    //생성자: 멤버변수의 값을 초기화할 용도로 사용!
    public Account(){
        balance = 10000;
    }
    public Account(int money){
        balance = money;
    }
//    public void initAcc(){
//        owner = "지정 안됨";
//        balance = 10000;
//        accNumber = "할당 없음";
//    }
    //입금: 매개변수로 입금액이 들어오면 입금!
    public void deposit(int money){
        balance += money; // balance = balance + money;
    }
    //출금
    public void withdraw(int money){
        if(balance - money < 0){
            System.out.println("잔액이 부족합니다.");
        }
        else {
            balance = balance - money;
        }
    }
    //계좌 정보를 확인(출력)
    public void showAcc(){
        System.out.println("계좌주 : " + owner);
        System.out.println("계좌번호 : " + accNumber);
        System.out.println("예금액 : " + balance);
    }
    //메소드 이름 중복될 수 있음(매개변수가 다르면)
}
public class AccountTest {
    public static void main(String[] args) {
        //객체 생성시 생성자가 반드시 호출되어야 함!
        //만약 클래스에 생성자가 하나도 정의되어있지 않다면
        //기본 생성자를 자동으로 만들어 줌.
        Account acc = new Account(20000); //매개변수를 정수화하는 생성자 호출
        Account acc1 = new Account(); //위에 있는 생성자를 통해 객체를 만듦
//        acc.initAcc();
//        acc.deposit(10000);
//        acc.withdraw(5000);
        acc.showAcc();
        //Account[] a = new Account[10];
    }
}

예제 6.

  • Student 클래스를 아래의 문제를 풀면서 완성하시오.
    • Student 클래스는 이름, 나이, 주소, 학번, 연락처를 멤버로 가지고 있습니다.
    • 각각의 멤버를 선언하고 모든 멤버를 초기화 하는 메소드를 만드세요.
    • Student 클래스에서 멤버 각각의 값을 변경하는 메소드를 만드세요.
    • Student 클래스에서 각각의 멤버 값을 리턴하는 메소드를 만드세요.
    • Student 클래스에 모든 멤버의 값을 출력하는 메소드를 만드세요.
public class Student2 {
    //멤버
    String name;
    int age;
    String arrd;
    int stuNum;
    String phnNum;
    //생성자
    public Student2(){
        name = "정보없음";
        age = 0;
        arrd = "정보없음";
        stuNum = 000000;
        phnNum = "010-0000-0000";
    }
    //모든 멤버 초기화
    public void initStu(){
        this.name = name;
        this.age = age;
        this.arrd = arrd;
        this.stuNum = stuNum;
        this.phnNum = phnNum;
    }
    //멤버 각각의 값을 변경하는 메소드
    public void setName(String name1){this.name = name1;}
    public void setAge(int age1){this.age = age1;}
    public void setArrd(String arrd1){this.arrd = arrd1;}
    public void setStuNum(int stuNum1){this.stuNum = stuNum1;}
    public void setPhnNum(String phnNum1){this.phnNum = phnNum1;}
    //각각의 멤버 값을 리턴하는 메소드
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public String getArrd() {
        return arrd;
    }
    public int getStuNum() {
        return stuNum;
    }
    public String getPhnNum() {
        return phnNum;
    }
    //출력
    public void printStu(){
        System.out.println("이름 : " + name);
        System.out.println("나이 : " + age);
        System.out.println("주소 : " + arrd);
        System.out.println("학번 : " + stuNum);
        System.out.println("연락처 : " + phnNum);
    }
}
public class Student2Test {
    public static void main(String[] args) {
        Student2 s = new Student2();
        s.printStu();
        //학생 정보 변경
        s.name = "이송민";
        s.age = 29;
        s.stuNum = 20140933;
        s.printStu();
    }
}

예제 7.

  • Calculator 클래스를 완성하여 계산기 프로그램을 완성해보세요.
    • 계산기 클래스는 정수 두 개를 멤버로 갖는다. 모든 멤버를 선언해보세요.
    • 계산기 클래스는 더하기, 뺴기, 나눗셈, 곱셈 기능을 가지고 있습니다. 각각의 메소드를 통해 연산의 결과를 리턴하는 메소드를 기능별로 하나씩 만드세요.
    • 계산기 클래스를 사용하는 클래스를 만들어 계산기 프로그램을 실행하여 보세요. main 메소드에서는 두 정수와 연산자를 scanner로 입력받습니다. 입력받은 연산자에 따라 더하기, 뺴기, 곱셈, 나눗셈 중 하나를 실행합니다. 실행 후 결과를 출력해보세요. 실행 결과는 아래와 같아야 합니다.
      -결과-
      첫 번째 수 : 10
      두 번째 수 : 20
      연산자 : +
      10 + 20 = 30
public class Calculator {
    //멤버선언
    int a;
    int b;
    //a, b 두 값을 변경하는 메소드
    public void setNumber(int a, int b){
        this.a = a;
        this.b = b;
    }
    public int sum(){
        return a + b;
    }
    public int minus(){
        return a - b;
    }
    public int multi(){
        return a * b;
    }
    public double divide(){
        return a / (double)b;
    }
}
public class CalculatorTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ///계산기에 대한 클래스 객체 생성
        Calculator calc = new Calculator();
        System.out.println("첫번째 수 : ");
        int num1 = sc.nextInt();
        System.out.println("두번째 수 : ");
        int num2 = sc.nextInt();
        System.out.println("연산자 : ");
        String oper = sc.next();
        calc.setNumber(num1, num2);
        //조건문(if, switch)
        switch(oper){
            case "+" :
                System.out.println(num1 + " + " + num2 + " = " + calc.sum());
                break;
            case "-" :
                System.out.println(num1 + " - " + num2 + " = " + calc.minus());
                break;
            case "*" :
                System.out.println(num1 + " * " + num2 + " = " + calc.multi());
                break;
            case "/" :
                System.out.println(num1 + " / " + num2 + " = " + calc.divide());
                break;
            default :
                System.out.println("잘못 입력했습니다.");
        }
    }
}

🍀 회고

  • 자바에서 매우 중요한 개념인 클래스에 대해 배웠고, 클래스는 객체를 정의하는 틀, 설계도의 의미로 사용되며, 이를 사용하여 여러 객체를 생성한다는 것을 알았다. 코딩을 처음 할 때 아무 개념없이 class를 만들어 사용했는데, 수업을 통해 클래스가 필드와 메소드로 구성된다는 것에 대해 다시 한 번 확인할 수 있었다.
profile
먹고 기도하고 코딩하라

0개의 댓글