Programing Language/Java

[Java] 오브젝트와 클래스(Object & Class)

vinedpillar 2022. 6. 2. 22:01

오브젝트(객체)

  • 객체란 실존하는 물체나, 개념 중 자신만의 영역을 가지고 다른 것과 구분되는 것을 뜻합니다.
  • 객체는 속성과 기능으로 구성됩니다.
    • 속성: 객체의 분류나 특징을 정의한 것으로 필드(field)라고도 합니다.
    • 기능: 객체의 동작이나 행위를 정의한 것으로 메서드(method)라고도 합니다.

 

 

 

 

클래스

  • 클래스란 객체지향 프로그램에서 객체를 생성할 때 사용하는 일종의 틀(frame) 입니다.

  • 클래스를 활용하여 같은 특징을 가진 객체를 계속 생성할 수 있습니다. 

  • 클래스로부터 생성된 객체를 해당 클래스의 인스턴스(instance)라고 합니다.

 

 

 

 

인스턴스

  • 인스턴스란 클래스를 통해 생성된 객체의 구현체라고 할 수 있습니다.

  • 인스턴스는 해당 클래스의 자료형의 변수에 생성되어 메모리에 할당됩니다.

  • 어떠한 추상적인 개념으로부터 실체화된 것이라는 넓은 의미로 사용되기도 합니다. 

 

 

 

 

클래스의 구성 요소

  • 필드(Field) / [속성]
    • 오브젝트의 분류, 상태 등 오브젝트를 정의하기 위한 데이터를 기술한 요소입니다.
    • 클래스가 포함하고 있는 변수(= 인스턴스 변수)입니다.
    • 클래스의 필드 데이터는 힙 메모리에 저장됩니다.

  • 메서드(Method) / [기능]
    • 오브젝트의 기능을 구현하기 위한 명령을 기술한 요소입니다.
    • 클래스가 포함하고 있는 함수(= 인스턴스 메소드)입니다.
    • 클래스의 메서드는 메모리의 클래스 영역에 저장되어 불러와집니다.

  • 컨스트럭터(Constructor) / [생성자]
    • 인스턴스를 생성하는 역할을 하는 요소입니다.
    • 인스턴스가 생성될 때 인스턴스 변수를 초기화하는 일종의 메서드입니다. 
    • 컨스트럭터는 반드시 클래스의 이름과 같아야 하며, 별도로 리턴을 선언하지 않습니다.
      (하지만 리턴값이 없음을 뜻하는 void 키워드는 사용하지 않음)

 

 

 

 

자바에서의 클래스 사용 문법

  • 클래스의 구조
클래스의 기본 구조

// 클래스 선언 부분
접근제어자 class 클래스이름 {
    // 클래스 필드 선언 부분
    // 필요한 경우 특정 데이터의 초기값을 설정할 수 있음
    접근제어자 자료형 변수이름;
    접근제어자 자료형 변수이름 = 초기값;
    
    
    // 클래스 컨스트럭터 선언 부분
    접근제어자 클래스이름(매개변수) {
    	// 매개변수의 데이터를 입력하는 부분
        // 매개변수가 없을 경우 생략 가능
        this.매개변수 = 매개변수;
    }
    
    
    // 클래스 메서드 선언 부분
    접근제어자 반환타입 메서드이름(매개변수) {
    	// 메서드의 로직을 입력하는 부분
        // 매개변수가 필요 없을 경우 생략 가능
        메서드 동작 코드;
    }
}

 

  • 클래스의 접근제어자가 public일 경우는 소스 파일(.java 파일)과 이름이 동일해야 합니다.
    (접근제어자란 클래스 정보 접근을 조정해주는 기능을 제공하는 키워드)

  • 한 소스 파일에 여러 개의 클래스를 생성할 수 있지만 public 클래스는 한 소스파일 당 하나만 생성 가능합니다.

 

 

 

 

클래스의 구조 예시

클래스의 구조 예시

// 클래스 선언 부분
public class Student {
    // 필드 영역 선언 부분
    // 학생의 정보 부분
    private int studentID;
    private String studentName;
    private int studenthHeight;
    private int studentWeight;
    private int score;
    private char studentGrade;
    private int PocketMoney;
    
    
    // 컨스트럭터 영역 선언 부분
    // 기본 컨스트럭터
    // (기본 컨스트럭터는 컴파일러가 자동으로 생성)
    public Student() {
    
    }
    
    // 매개변수를 가지는 컨스트럭터
    // 학생ID와 학생이름을 가지는 컨스트럭터
    public Student(int studentID, String studentName) {
        this.studentID = studentID;
        this.studentName = studentName;
    }

	
    // 메서드1
    // 학생이 학교로 가는 메서드
    public void goToSchool() {
        System.out.println("학교에 갑니다!");
    }
	
    // 메서드2
    // 성적을 체크하는 메서드
    public getGrade(int score) {        
        if(score >= 90) {
            studentGrade = 'A';
        } 
        else {
            studentGrade = 'F';
        }
        
        return studentGrade;
    }
    
    // 메서드3
    // 용돈을 받는 메서드
    public recivePocketMoney() {
        pocketMoney += prizeMoney;
        System.out.println("용돈을 받았습니다!");
    }
}