Notice
Recent Posts
Recent Comments
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

클래스 본문

Java

클래스

빌드이너프 2023. 2. 3. 15:23
자바: 클래스들의 모음
클래스: 객체를 정의하기 위한 설계도
객체: 데이터를 가지고 있고 어떤 행동(연산)들을 수행할 수 있다
객체의 데이터: 클래스 내에서 변수들로 나태지고 행동은 메소드에 의해 저으이됨
ex. String 객체를 생성하고 그 객체의 메소드를 호출하여 이용함

 

클래스와 객체

  • 자바 프로그램은 클래스들로 이루어지고, 클래스는 한 유형의 객체를 정의함
  • 클래스는 특정 객체를 만들기 위한 설계도라고 볼 수 있다
  • 프로그램 내에서 객체들은 사람, 자동차, 스마트폰과 같은 실 세계의 객체들이나 은행 계좌나 모양과 같은 추상 개념을 나타낼 수 있음
  • 객체는 데이터를 가지고 어떤 일(혹은 행동)을 수행할 수 있다

Person 클래스와 Person 객체들

  • 그림처럼 사람을 모델하는 Persion 클래스와 Person 객체들을 보여줌
  • 그 클래스는 사람 관련 속성(혹은 데이터)와 사람이 할 수 있는 행동을 기술함
  • Person 클래스의 객체: 특정한 사람
  • Person 클래스로부터 두 개의 Person 객체들이 생성됨
  • 한 객의 이름은 person1, 다른 객체의 이름은 person2이다
  • 우리는 이 객체들을 구별하기 위해 이름(혹은 참조변수)을 사용함
  • 클래스는 모델하는 대상의 속성을 명시함
  • Person 클래스는 이름과 나이를 나타내는 두 개의 속성을 가짐
  • 클래스는 각 속성의 값을 가지지 않음
  • 반면에 클래스로부터 생긴 객체는 각 속성의 값을 가짐
  • 클래스 내에서 각 속성은 변수로 선언됨
  • 클래스는 객체들이 할 수 있는 일(혹은 행동)들과 그 일을 수행하는 방법을 기술함
  • Person 클래스는 Person 객체들이 할 수 있는 4개의 행동들을 기술함
  • 그 행동들은 getName, setName, getAge, setAge
    • getName: 이름을 알려줌
    • getAge: 나이를 알려줌
    • setAge: 나이를 변경함
    • setName: 이름을 변경함
  • 이러한 행동들은 클래스 내에서 메소드들로 표현됨
  • 같은 클래스에서 생성된 모든 객체들은 같은 메소드들을 가짐

클래스 구조

  • 클래스는 머리부와 몸체로 이루어짐
  • 클래스 머리부는 클래스 이름을 포함하고 클래스 이름 앞에는 예약어 class가 나옴
  • 머리부의 맨 앞에 있는 public라는 예약어: 프로그램 내에서 어디든지 사용될 수 있는 공개된 클래스라는 것을 의미
public class 클래스이름
{
    변수(혹은 상수) 선언문들
    메소드 정의들
}
  • 변수 선언문들과 메소드 정의들의 위치는 바뀔수 있음
  • 변수는 객체 변수와 클래스 변수로 나누어짐
  • 메소드는 객체 메소드(instance method)와 클래스 메소드(class method)로 나누어짐

객체 변수

  • 모델하는 대상 각각에 해당하는 데이터 나타냄

객체 메소드

  • 객체에 적용되는 메소드
  • 수행하는 역할에 따라 접근 메소드(accessor)와 변경자 메소드(mutator)로 나눌 수 있음

 

  • 접근자 메소드
    • 객체의 속성에 대한 값을 반환하는 메소드
    • 변수의 값이나 계산되는 값을 반환할 수 있음
객체의 현 상태를 알고 싶은 경우 toString 메소드 사용
toString 메소드는 객체 변수들의 값들을 나타내는 문자열의 반환
toString 메소드는 한 객체가 문자열과 합쳐지거나 print나 println 메소드에 넘겨질 때 자동적으로 호출됨
따라서 객체들을 나타내는 클래스들은 대부분 toString 메소드를 정의함
  • 변경자 메소드
    • 객체 변수의 값을 바꾸는 메소드
    • 보통 객체 변수의 값을 매개변수로 받는 값으로 변경
    • 자주 객체 변수에 대한 접근을 제한하고 그에 따라 변수 값을 제어하기 위해 사용

학생의 성적 기록을 모델하는 클래스 작성한 프로그램(Student 클래스)

// 학생의 성적 기록을 나타냄
import java.util.Scanner;
public class Student {
    // 객체 변수들
    public String name; // 이름
    public int assignmentScore; // 과제 점수
    public int examScore; // 시험 점수

    // 객체 메소드들
    // 현 Student 객체의 정보에 대한 문자열을 반환함
    public String toString()
    {
        String str = "";
        str += "이름: " + name + "\n";
        str += "과제 점수: " + assignmentScore + "\n";
        str += "시험 점수: " + examScore + "\n";
        str += "학점: " + examScore + "\n";
        return str;
    }

    // 학생의 학점을 반환
    public char getGrade()
    {
        char letterGrade; // 학생의 학점
        double total; // 학생의 점수들의 총점

        // 학생의 점수들의 총점을 계산함
        total = assignmentScore*0.4 + examScore*0.6;

        // 총점에 따라 학점을 부여함
        if (total >= 90) letterGrade = 'A';
        else if (total >= 80) letterGrade = 'B';
        else if (total >= 70) letterGrade = 'C';
        else if (total >= 60) letterGrade = 'D';
        else letterGrade = 'F';

        return letterGrade;
    }
}
  • public String name;
  • public int assignmentScore;
  • public int examScore;
    • Student 클래스의 각 객체는 특정 학생의 이름, 과제 점수와 시험 점수를 저장함
    • 따라서 클래스 내에 세 개의 객체 변수 선언문 존재
  • 클래스 내에 총점과 학점을 저장하는 변수가 없음
  • 특정 학생마다 총점과 학점 데이터가 있지만 이 값들은 필요할 때마다 과제 점수와 시험 점수를 이용하여 계산할 수 있기 때문에 객체 변수에 포함되지 않음

 

  • 각 Student 객체는 toString과 getGrade 메소드에 의해 정의된 두 가지 행동을 함
  • 첫 번째 행동: 각 객체와 연관된 모든 데이터를 문자열로 반환함
  • 두 번째 행동: 각 객체의 학점을 계산하여 반환

 


클래스와 객체의 이용

  • 클래스를 이용하기 위해 먼저 클래스의 한 실례인 객체를 만들어야 함

객체 만드는 과정

  1. 클래스의 한 실례인 객체를 참조하는 변수를 선언함
  2. new 라는 연산자를 이용하여 클래스의 한 객체를 만들고 이를 1번에서 선언한 참조변수가 가리키게 함
  • 만들어진 객체를 이용하여 원하는 일을 수행하기 위해 객체의 절절한 메소드를 호출함

객체 메소드를 호출하는 구문 양식

  • <객체를 가리키는 참조변수 명>.<객체 메소드명>(실제 매개변수 목록)
  • 객체 메소드가 매겨변수를 가지고 있지 않다면 실제 매개변수 목록은 비게됨
  • 한 클래스의 객체를 만들고 그 객체의 메소드들을 호출하는 문들은 main 메소드 안에 포함될 수 있음
    • main 메소드는 자신만을 포함하는 새 클래스 안에 포함될 수 있음
      • 주로 사용되며 새 클래스가 시작 프로그램으로서 실행됨
    • 한 대상을 모델하는 클래스에 포함될 수도 있다
      • 클래스별로 독립적으로 클래스를 시험하기 위해 사용됨

위에서 작성한 Student 클래스를 이용하는 프로그램

// Student 클래스와 그 메소드들을 사용함
public class StudentDriver {
    public static void main(String[] args) {
        // 첫 번째 학생을 나타내는 객체를 만듬
        Student stud1 = new Student();

        // 첫 번쨰 학생의 이름 정함
        stud1.name = "선남";

        // 첫 번째 학생의 과제 점수 줌
        stud1.assignmentScore = 91;

        // 첫 번째 학생의 시험 점수 줌
        stud1.examScore = 84;

        // 첫 번째 학생의 이름, 점수들과 학점 출력
        System.out.println(stud1.toString());


        // 두 번째 학생을 나타내는 객체 만듬
        Student stud2 = new Student();

        // 두 번쨰 학생의 이름 정함
        stud2.name = "선녀";

        // 두 번째 학생의 과제 점수 줌
        stud2.assignmentScore = 86;

        // 두 번째 학생의 시험 점수 줌
        stud2.examScore = 95;

        // 두 번째 학생의 이름, 점수들과 학점을 출력
        System.out.println(stud2.toString());
    }
}

실행 결과

이름: 선남
과제 점수: 91
시험 점수: 84
학점: 84

이름: 선녀
과제 점수: 86
시험 점수: 95
학점: 95
  • Student 클래스로부터 한 객체를 생성하고 그 객체를 stud1이라는 참조변수가 가리키게 하는 문
    • Student stud1 = new Student();
  • stud1이 가리키는 객체는 name, assignmentScore와 examScore 변수를 가짐
  • 각각의 변수를 나타내기 위해 이름은 <객체 참조 변수이름>.<객체 변수 이름> 과 같이함
  • 예를 들면 stud1의 name 변수를 나타내기 위해 stud1.name이라고 함
  • 이 변수의 값을 '선남'으로 정하는 문은 stud1.name = "선남";

요약

  • 클래스는 객체의 설계도
  • 여러 개의 객체들이 한 클래스로부터 만들어 질 수 있다
  • 이 객체들을 구별하기 위해 이름(참조변수)를 사용함

 

  • 클래스는 데이터들의 선언문들과 메소드들의 정의들로 구성됨
  • 데이터와 메소드는 각각 모델하는 개체의 속성과 연산을 나타낸다
  • 모든 객체는 특정 클래스의 한 실례이다
  • 클래스는 머리부와 몸체로 이루어짐
  • 객체 변수는 모델하는 대상 각각에 해당하는 데이터를 나타냄
  • 객체 메소드는 객체에 적용되는 메소드
  • 객체 메소드는 수행하는 역할에 따라 변경자 메소드와 접근자 메소드로 나눌 수 있음
  • 변경자 메소드: 객체 변수의 값을 바꾸는 메소드
  • 접근자 메소드: 객체 변수의 값을 반홚하거나 새로운 값을 계산하는 메소드
  • 클래스로부터 객체가 생성될 때 객체 데이터에 대한 메모리 공간이 할당됨
  • 클래스를 이용하기 위해 객체를 만들어야 함
  • 접근 수정자는 클래스, 변수와 메소드 앞에 위치하여 그것들이 이용될 수 있는 접근의 범위를 나타냄
  • 드라이버(Driver) 클래스는 main 메소드만을 포함하며 자주 다른 클래스들을 시험하기 위해 사용됨

'Java' 카테고리의 다른 글

접근자 메소드(get method) / 변경자 메소드(set method  (1) 2023.02.04
접근 수정자(Access Modifier) public / private  (0) 2023.02.03
메소드  (0) 2023.02.02
반복문 - for 문  (0) 2023.02.01
반복문 - do 문  (0) 2023.02.01