클래스와 객체

JavaBeginner
지금 연습하기

소개

이 랩에서는 매우 중요한 프로그래밍 패턴인 객체 지향 프로그래밍 (object-oriented-programming) 에 대해 배우게 됩니다. 클래스와 객체의 차이점을 알아야 합니다. 더 나은 이해를 위해 더 많은 연습을 하십시오.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 93%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

클래스와 객체

다양한 프로그래밍 언어가 있으며, 거의 그만큼 많은 프로그래밍 스타일 (때로는 패러다임이라고 함) 이 있습니다. 지금까지 작성한 프로그램은 주로 절차적 (procedural) 입니다. 왜냐하면 계산 절차를 지정하는 데 중점을 두었기 때문입니다. 대부분의 Java 프로그램은 객체 지향적 (object-oriented) 입니다. 이는 초점이 객체와 객체의 상호 작용에 맞춰져 있음을 의미합니다. 객체 지향 프로그래밍의 특징은 다음과 같습니다.

객체는 종종 실제 세계의 엔티티를 나타냅니다. 대부분의 메서드는 클래스 메서드 (예: Math 메서드) 가 아닌 객체 메서드 (예: String에서 호출하는 메서드) 입니다. 지금까지 작성한 메서드는 클래스 메서드였습니다. 이 장에서는 몇 가지 객체 메서드를 작성할 것입니다.

객체는 상호 작용 방식을 제한하여 서로 격리됩니다. 특히 메서드를 호출하지 않고 인스턴스 변수에 접근하는 것을 방지합니다. 클래스는 새로운 메서드를 추가하고 다른 메서드를 대체하면서 새로운 클래스가 기존 클래스를 확장하는 계층 구조로 구성됩니다.

Java 에서 모든 클래스는 Object 클래스를 제외하고 다른 클래스를 확장합니다. 가장 기본적인 클래스는 Object 클래스입니다. 인스턴스 변수는 없지만, equalstoString 메서드를 제공합니다.

많은 클래스가 Object를 확장하며, 여기에는 우리가 작성한 거의 모든 클래스와 Integer, Double, String, 배열 등과 같은 많은 Java 타입이 포함됩니다. 부모를 명시적으로 지정하지 않는 모든 클래스는 기본적으로 Object를 확장합니다. 클래스의 "계층 구조"는 클래스 계층 구조라고 합니다. Object는 일반적으로 맨 위에 나타나고, 모든 자식 클래스가 그 아래에 있습니다.

클래스와 객체는 일반적으로 이러한 클래스/객체를 설명하는 데 사용되는 몇 가지 속성을 가지며, 메서드는 특정 기능을 수행하는 데 사용됩니다. 여기서는 클래스가 어떤 모습인지 보여주는 예시를 제공합니다. 코드를 objectTest.java로 저장하고 명령줄을 사용하여 코드를 실행하십시오.

예시:

/home/labex/project/objectTest.java 파일에 다음 코드를 작성합니다.

// use keyword 'class' to create a new class named Person
class Person
{
    /*
     * there are four properties,
     * name of string type, age of int type
     * gender of string type, weight of float type
    */
    private String name;
    private int age;
    private String gender;
    private float weight;
    // this is a constructor with no return type, the same name as the class, no parameters
    public Person(){

    }
    //this is a constructor with two parameters
    public Person(String name, int age){
        // use parameters to set object's name and age
        this.name = name;
        this.age = age;
    }
    // this is a constructor with four parameters
    public Person(String name, int age, String gender, float weight){
        // use parameters to set object's name, age, gender and weight
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.weight = weight;
    }
       // this is an object method
    public void personInfo(){
        System.out.println("Name: " + this.name + "\nAge: "+ this.age + "\nGender: " + this.gender + "\nWeight: "+this.weight);
    }
}

public class objectTest{
    public static void main(String[] args){
        // use 'new' to create an instance of class Person
        Person p = new Person("aaa",18,"male",50.5f);  // p refers to  an object
        /* you can try these two different construction methods, and see what the output is.
         * Person p  = new Person();
         * Person p = new Person("aaa",18);
        */
        // use object to invoke method personInfo()
        p.personInfo();
    }
}

출력:

다음 명령을 사용하여 objectTest.java 파일을 실행합니다.

javac /home/labex/project/objectTest.java
java objectTest

출력을 확인합니다.

Name: aaa
Age: 18
Gender: male
Weight: 50.5

Person 클래스에는 네 개의 속성이 있습니다. 모든 속성은 private 이므로 외부에서 접근할 수 없습니다 (클래스 내부에서만 사용 가능). 개인 정보를 출력하는 데 사용되는 personInfo라는 객체 메서드가 하나 있으며, 클래스 이름 Person과 동일한 이름을 가진 세 개의 생성자가 있습니다. 그들 간의 유일한 차이점은 매개변수입니다. 이 동작을 **오버로딩 (overloading)**이라고 합니다.

요약

이 부분은 매우 중요합니다. 클래스는 공통 기능을 가진 엔티티의 추상화이며, 객체는 특정 기능을 가진 엔티티입니다. 위에 언급된 프로그래밍 스타일을 이해하는 데 더 많은 시간을 할애해야 합니다.