▶ JAVA/개념정리

[Java] 10. 객체지향언어(1)_클래스

휴학생감자 2022. 2. 10. 23:39

객체지향언어

실제 세계의 사물과 모든 상호작용을 가상 세계(컴퓨터)의 데이터와 함수로 정의한 것

기존의 프로그래밍 언어에 몇 가지 새로운 규칙을 추가하여 발전시킨 언어이다.

 

특징

1. 코드의 재사용성이 높다.

2. 코드의 유지보수가 용이하다.

3. 신뢰성이 높은 프로그래밍이 가능하다.

 

 

객체

실제로 존재하는 사물 또는 개념(유형적/무형적 모두 포함)

 

클래스(Class)

객체를 정의해높은 것, 객체의 설계도이자 틀

 

인스턴스

클래스로부터 만들어진 객체 

 

인스턴스화 : 클래스로부터 객체를 만드는 과정

 

※ 객체 ≠ 인스턴스

      객체는 모든 인스턴스를 포괄하는 의미, 인스턴스는 어떤 클래스로부터 만들어진 구체적인 것을 말한다.

      엄연히 두 용어는 다르지만,  대부분 섞어서 사용된다.

 

 

객체의 구성요소 : 속성과 기능

# 속성(property) = 멤버변수(member variable) = 특성(attribute) = 필드(field) = 상태(state)# 기능(function) = 메서드(method) = 함수(function) = 행위(behavior)

 

→ 클래스 내에 객체의 속성과 기능들을 정의하며, 객체를 사용하기 위해서는 인스턴스를 생성해야 한다.

 

인스턴스 생성1. 클래스명 변수명;  // 클래스의 객체를 참조하기 위한 참조변수를 선언함2. 변수명 = new 클래스명( );   // 클래스의 객체를 생성한 후, 객체의 주소를 참조변수에 저장함

 

new 연산자에 의해 인스턴스가 메모리에 생성되면, 각 멤버변수는 해당하는 자료형의 기본값으로 초기화된다.

선언된 참조변수는 생성된 객체(인스턴스)의 주소값을 저장하고 있다.

인스턴스에 접근하기 위해서는 반드시 '참조변수.멤버변수'의 형태로 해야 한다.

또한, 당연하지만 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.

 

 

객체 배열(=참조변수 배열)

여러 개의 객체를 다루어야 할 때 사용하는 배열으로, 참조변수들을 하나로 묶어놓은 것이다.

객체 배열을 생성하면 배열의 각 요소들은 참조변수의 기본값인 null로 자동 초기화된다.

 

Ex) Student[] sArr = new Student[100];

이는 객체 배열을 생성만 한 것으로 인스턴스에 접근가능한 참조변수만 생성되어 있는 것이다.

객체는 생성되지 않았으므로 반드시 객체를 생성하여 각 요소에 저장해주어야 한다!

 

Ex) sArr[0] = new Student( );

각 요소에는 초기화 또는 for문을 통해 참조변수에 값을 넣어줄 수 있다.

 

public class exCode {
    public static void main(String[] args) {

        Student s1 = new Student();
        System.out.println(s1.name); //String의 기본값인 null

        s1.name = "홍길동";
        System.out.println(s1.name); //결과 : 홍길동

        Student[] stArr = new Student[5];  //객체 배열 생성
        stArr[0] = new Student();          //객체를 생성하여 요소에 저장

        stArr[0].grade = 1;
        System.out.println(stArr[0].grade); //결과 : 1

        stArr[0].gradeUp();
        System.out.println(stArr[0].grade); //결과 : 2

        stArr[0].gradeDown();
        System.out.println(stArr[0].grade); //결과 : 1
    }
}

class Student{
    String name; //이름
    int grade;   //학년

    void gradeUp() { ++grade;}
    void gradeDown() {--grade;}
}