본문 바로가기
Java/Java

[Java] 클래스 선언

by 전재경 2022. 11. 22.

클래스 구조

 

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

클래스 내부에는 클래스의 속성을 나타내는 필드와 클래스의 동작을 나타내는 메소드 그리고 클래스를 생성할 때 호출할 수 있는 생성자가 있습니다. 생성자는 new 연산자를 통해 호출할 수 있는 메소드라고 생각하시면 되며 주로 필드의 변수들을 초기화하는 역할을 합니다. 

 

 클래스 선언 및 인스턴스 생성 

클래스 선언

class 클래스명{ }
class Student{
    //필드(Field)
    String name; //이름
    int age; //나이
    int korean_scroe; //국어성적
    int math_score; //수학성적
    int english_score; //영어성적
    
    //생성자(Constructor)
    Student(String name, int age, int kor_score, int mat_score, int eng_score){
        this.name = name;
        this.age = age;
        this.korean_scroe = kor_score;
        this.math_score = mat_score;
        this.english_score = eng_score;
    }
    
    //메소드(Method)
    public void printScore() {
        System.out.println("이름 : " + name);
        System.out.println("나이 : " + age);
        System.out.println("국어성적 : " + korean_scroe);
        System.out.println("수학성적 : " + math_score);
        System.out.println("영어성적 : " + english_score);
    }
}

클래스는 위와 같이 class 클래스명{}  와 같은 형태로 만들어주시면 되며 내부에 필드, 생성자, 메소드를 정의하시면 됩니다. 추가로 생성자와 메소드는 오버 로딩이 가능합니다. 이렇게 생성된 클래스는 하나의 객체 설계도라고 생각하시면 되며 이렇게 정의된 클래스를 통해 동일한 객체를 무한정 찍어내실 수 있습니다. 이렇게 찍어낸 객체를 인스턴스라고 합니다.

 

쉽게 생각해서 붕어빵 틀을 클래스, 붕어빵을 인스턴스라고 생각하시면 이해가 쉬울 듯 합니다. 

 

인스턴스 생성

public class Main {
    public static void main(String[] args) {
    
        //생성자가 없는 경우
        Student student1 = new Student();
        
        //생성자가 있는 경우
        Student student2 = new Student("홍길동", 18, 100, 90, 80);
    }
}

클래스를 통해 객체를 생성하기 위해서는 new 연산자를 사용하시면 됩니다. new 연산자 뒤에는 생성자가 오는데, 생성자는 클래스() 형태를 가지고 있으며 생성자의 여부에 따라 인자 값을 맞춰서 넣으시면 됩니다. 이렇게 new 연산자로 생성된 객체는 힙 메모리 영역에 생성되며 이렇게 만들어진 객체를 해당 클래스의 인스턴스(instance)라고 합니다. 

 

인스턴스 메소드 사용

class Student{
    //필드(Field)
    String name; //이름
    int age; //나이
    int korean_scroe; //국어성적
    int math_score; //수학성적
    int english_score; //영어성적
    
    //생성자(Constructor)
    Student(String name, int age, int kor_score, int mat_score, int eng_score){
        this.name = name;
        this.age = age;
        this.korean_scroe = kor_score;
        this.math_score = mat_score;
        this.english_score = eng_score;
    }
    
    //메소드(Method)
    public void printScore() {
        System.out.println("이름 : " + name);
        System.out.println("나이 : " + age);
        System.out.println("국어성적 : " + korean_scroe);
        System.out.println("수학성적 : " + math_score);
        System.out.println("영어성적 : " + english_score);
    }
}

public class Main {
    public static void main(String[] args) {
        Student student = new Student("홍길동", 18, 100, 90, 80);
        student.printScore(); //인스턴스 메소드 호출
    }
}

 


 

자바 this

 

People클래스에 Age필드와 setAge( ) 메소드가 다음과 같이 선언되어 있다고 가정해보겠습니다.

public class People{

  //필드
  int age;

  //메소드
  void setAge(int a){
    age = a;
  }
}

위와같이 age에 외부의 값을 입력받을 수 있는 setAge( )라는 Setter함수를 선언하였습니다. 위에서는 메서드의 인자 변수이름을 int a라 하였는데 여기서 인자값의 변수를 필드의 이름과 같이 하려면 어떻게 해야할까요?

 

this를 사용하면, 메서드의 인수나 변수에 필드와 같은 이름을 붙여도 그것들을 구분하여 사용할 수 있습니다. this는 주로 생성자와 메소드의 매개변수 이름이 필드와 동일한 경우, 인스턴스 멤버인 필드임을 명시하고자 할때 사용됩니다.

public class People{

  //필드
  int age;

  //메소드
  void setAge(int age){
    this.age = age;
  }
}

위와 같이 인자값의 변수명과 필드의 변수명이 같아도 this를 활용하면 같이 사용이 가능합니다. 위의 코드를 예로 들자면 this.age는 필드인 age를 의미합니다. 즉, this의 뒤의 변수명은 인수가 아닌 멤버변수(필드)를 의미하는 것이 됩니다.

 

참고블로그 : 

 

[C++] 클래스(Class) 사용법 & 예제 총정리

클래스(Class)란? 클래스(class)는 객체 지향 프로그래밍(OOP)에서 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 일종의 틀이며 내부적으로 객체를 정의하기 위한 상태 값을 의미하는 멤버

coding-factory.tistory.com

 

'Java > Java' 카테고리의 다른 글

[Java]오버라이딩 (Override)  (0) 2022.11.27
[Java] 클래스의 구성  (0) 2022.11.22
Object-Oriented Programming(OOP)  (0) 2022.11.22
[Java] 정규표현식(Regular Expression)  (0) 2022.11.20
[Java] 람다식 (Lambda Expressions)  (0) 2022.11.20

댓글