본문 바로가기
Programming/Java

[자바/Java] 클래스

by 코딩하는 랄로 2023. 9. 29.
728x90

클래스의 정의

자바 프로그래밍은 OOP(객체 지향 프로그래밍)이라고도 한다. 객체 지향 프로그래밍이란, 현실 세계에서도 특정 제품을 만들 때 여러 가지 부품들을 각각 만들어 하나로 조립하듯이 프로그밍적으로도 여러가지 객체(Object)를 각각 만들어서 하나로 조립하는 프로그래밍 기법이다.

 

이 때에 객체는 클래스를 통해 생성할 수 있게 된다.각 부품들의 기능과 또 그 부품이 가지는 또 다른 부품들로 이루어져 있듯이 객체를 생성하는 클래스도 다음과 같은 구조를 가지고 있다.

 

  • 필드(Field) : 객체의 데이터가 저장되는 곳
  • 생성자(Constructor) : new 연산자로 호출되는 메소드로 객체 생성 시 필드의 초기화를 담당
  • 메소드(Method) : 객체의 동작에 해당하며 클래승의 다양한 동작을 구성

 

간단한 예제로 위와 같은 구조를 토대로 클래스를 하나 생성해보겠다.

class Student {
    
    //Field
    String name;//이름
    int kor;    //국어
    int math;   //수학
    int eng;    //영어
    
    
    //Constructor
    Student(int kor, int, math, int eng) {
        this.kor = kor;
        this.math = math;
        this.eng = eng;
    }
    
    
    //method : print score
    public void printAvgScore() {
        System.out.println("avg : " + (kor + math + eng) / 3);
    }
    
}

 

 

 

생성자(Constructor)

클래스에 선언된 여러 메소드를 사용하기 위해서는 클래스의 생성자를 통해 객체를 생성하여야 한다. 이 때에 생성된 객체를 인스턴스(instance)라고 한다.

 

 

기본 생성자

클래스내에 어떠한 생성자도 선언되어 있지 않은 경우에는 자바가 기본생성자를 자동으로 넣어주어 해당 클래스에 인스턴스를 생성할 수 있다.

class Student {

    String name;
    ...
    
    
    No Constructor
    /*
    Student() {
    }
    */
    
    
    public printScore() {
        ...
    }
}

주석처리된 기본생성자(Student() {} )가 생략되어 있는 것이다.

 

 

생성자의 오버로딩

생성자도 메소드이기 때문에 오버로딩이 가능하여 여러 생성자를 선언할 수 있다.

class Student {

    String name;
    ...
    
    
    Student() {}
    
    Student(String name) {
        this.name = name;
    }
    
    Student(String name, int kor, int math, int eng) {
        this.name = name;
        this.kor = kor;
        this.math = math;
        this.eng = eng;
    }
    
    
    public printScore() {
        ...
    }
}

 

 

 

Getter & Setter

Getter와 Setter는 메소드로서 클래스내에 필드에 값을 알아내고(get) 설정할수 있는(set) 메소드이다. 클래스의 필드에 직접 접근하는 것이 아닌 getter와 setter를 통해 접근하는 이유에 대해서 알아야 한다.

 

바로 프로그래밍에서 주요한 개념 중 하나인 캡슐화를 위해서 이다. 캡슐화란 클래스 안에 필요한 '속성' 과 '행동'을 멤버로 묶고 외부에서의 '직접적인 접근을 제한'하여 객체의 데이터와 메소드를 은닉하고 사용자에게는 필요한 기능만 제공하여 추상화는 객체지향 기술이다.

 

그렇기 때문에 클래스에서 해당 필드에 접근을 제어하기 위한 modifier를 사용하고 이 에 접근하기 위한 메소드로 getter와 setter 라고 한다.

 

 

자바빈(Java Bean)

Java Beans 규약에 따라 작성된 자바 클래스로 자바빈 클래스 외부에서 필드에 접근할 경우, 반드시 규약대로 정의된 getter와 setter 메소드를 통해 접근해야 한다.

 

바로 이렇게 제공되는 getter, setter를 프로퍼티라 한다.

 

 

프로퍼티(Property)

프로퍼티인 getter, setter 네이밍 규약은 다음과 같다.

  • 프로퍼티 값을 '읽는' 메소드는 get으로 시작한다. (읽기 속성)
  • 프로퍼티 값을 '변경'하는 메소드는 set으로 시작한다. (쓰기 속성)
  • get과 set 뒤에는 프로퍼티의 이름 첫 글자를 대문자로 바꾼다.
  • set 메소드는 1개의 파라미터를 갖는다.

프로퍼티는 필드를 일컫는 말이 아닌, 필드 값에 대해 읽고 쓰는 것뿐만이 아니라, 객체의 속성을 표현하는 값을 다루는 것이면 무엇이든 가능하다.

 

 

 

This

this 키워드는 클래스 안에서 자기 자신을(instance) 가르킬 때 사용한다. 위의 생성자 예시에서도 this를 통해 해당 인스턴스의 필드값을 변경해주는 것을 알 수 있다.

728x90