"안녕, 아미고. 오늘은 전형적인 자바 프로그램에 대해 알려줄게. 자바로 작성된 모든 프로그램은 클래스와 객체로 구성된다는 큰 뉴스가 있다."

"나는 이미 클래스가 무엇인지 알고 있습니다. 객체가 무엇입니까?"

"유추부터 시작하겠습니다. 작은 배를 만들고 싶다고 가정해 보겠습니다. 설계 작업을 한 다음 설계도에 따라 배가 조립되는 공장에 청사진을 보냅니다. 또는 12척의 선박 또는 많은 선박이 있습니다. 내 요점은 하나의 설계도를 기반으로 수십 개의 동일한 함선을 만들 수 있다는 것입니다."

"정확히 Java에서 작동하는 방식입니다."

" Java 프로그래머는 설계 엔지니어와 같지만 청사진을 만드는 대신 클래스를 작성합니다. 선박 부품은 청사진을 기반으로 만들고 개체는 클래스를 기반으로 만듭니다. "

"먼저 우리는 클래스를 작성합니다(청사진을 만듭니다). 그런 다음 프로그램이 실행되면 Java 머신이 이러한 클래스를 기반으로 객체를 생성합니다. 청사진에서 선박을 만드는 방법과 정확히 같습니다. 하나의 청사진 - 많은 선박. 선박은 다릅니다. . 이름도 다르고 화물도 다릅니다. 하지만 여전히 비슷합니다. 모두 동일한 디자인을 가지고 있으며 유사한 작업을 수행할 수 있습니다."

"좋아요, 당신의 배에 대한 비유를 알겠습니다. 당신이 말하는 것을 제가 확실히 이해할 수 있도록 몇 가지를 더 주시겠습니까?"

"예를 들어 꿀벌을..."

"아니, 긁어. 나는 꿀벌에 대해 안 좋은 경험을 했어. 개미를 잡자."

"개미 군집은 물체가 어떻게 상호 작용하는지에 대한 좋은 예입니다. 모든 개미 군집은 여왕 개미, 군인 및 일개미의 세 가지 클래스로 구성됩니다. 각 클래스의 개미 수는 다양합니다. 일반적으로 식민지에는 여왕이 한 명, 군인 수십 명만 있습니다. , 그리고 수백 명의 일개미. 세 개의 클래스, 수백 개의 개체. 개미는 자신의 클래스에 있는 개미와 다른 클래스에 속하는 개미와 상호 작용할 때 엄격한 규칙을 따릅니다."

"이것은 완벽한 예입니다. 일반적인 프로그램은 정확히 그렇게 작동합니다. 모든 클래스에 개체를 생성하는 기본 개체가 있습니다. 개체는 서로 상호 작용하고 외부 세계와 상호 작용합니다. 개체의 동작은 내부적으로 고정(프로그래밍)되어 있습니다. ."

"잘 이해가 안 돼요. 제 말은, 전혀 이해가 안 돼요."

"이 두 가지 설명은 동전의 양면과 같습니다. 진실은 그 사이 어딘가에 있습니다. 첫 번째 예(청사진과 배에 관한)는 클래스와 해당 개체 간의 연결을 보여줍니다. 강력한 비유입니다. 개미 식민지 비유는 다음을 보여줍니다. 클래스에 의해 설명되고 프로그램이 실행되는 동안에만 존재하는 개체 간의 관계입니다."

"프로그램에서 사용되는 모든 개체에 대한 클래스를 작성하고 그 상호 작용을 설명해야 한다는 뜻입니까?"

"예, 하지만 들리는 것보다 쉽습니다. Java에서는 프로그램이 실행되는 동안 모든 엔터티가 개체입니다. 프로그램을 작성한다는 것은 개체가 상호 작용할 수 있는 다양한 방법을 설명하는 것과 같습니다. 개체는 단순히 서로의 메서드를 호출하고 필요한 데이터를 전달합니다. 그들에게."

"조금 흐릿하지만 거의 이해한 것 같아요."

"어떤 메서드를 호출하고 어떤 데이터를 전달할지 어떻게 알 수 있습니까?"

"각 클래스에는 의도된 용도를 나타내는 선언이 있습니다. 마찬가지로 모든 메서드에는 수행할 수 있는 작업과 전달해야 하는 데이터가 무엇인지 나타내는 선언이 있습니다. 클래스를 사용하려면 무엇에 대한 일반적인 이해가 필요합니다. 그렇습니다. 각 방법이 무엇을 하는지 정확히 알아야 하지만 정확히 어떻게 하는지는 알 수 없습니다 . 마술 지팡이와 같습니다."

"허! 좋은데."

"여기. 파일을 복사하는 클래스의 코드를 살펴보십시오."

c:\data.txt를 c:\result.txt로 복사
package com.codegym.lesson2;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopy
{
    public static void main(String[] args) throws IOException
    {
        FileInputStream fileInputStream = new FileInputStream("c:\data.txt");
        FileOutputStream fileOutputStream = new FileOutputStream("c:\result.txt");

        while (fileInputStream.available() > 0)
        {
            int data = fileInputStream.read();
            fileOutputStream.write(data);
        }

        fileInputStream.close();
        fileOutputStream.close();
    }
}

"다 이해했다고 말할 수는 없지만, 본질은 파악한 것 같아요."

"좋아. 그럼 다음에 보자."

"잊을 뻔 했어요. 여기 디에고의 임무가 있습니다."