package am;

public class Exam08{
    public static void main(String[] args) {
        /* 클래스와 객체
        * 객체는 사용 가능한 실체를 의미하고 클래스는 그 객체를 생성하기 위한 설계도
        
        * 절차 지향은 이야기를 순서대로 쓰듯이 프로그램을 구성하는 방식
        * 반면에 객체 지향은 프로그램에서 사용되는 객체를 생성하고 
        * 그 객체에 포함된 데이터와 기능을 상호 호출하는 방식으로 프로그램을 구성
        * 객체에 포함되는 데이터는 속성 또는 필드라고 부르고 기능을 매서드라고 부름

        * 자바에서 제공되는 객체 지향 요소
        * 일반클래스, 추상클래스, 인터페이스
        * 클래스와 인터페이스를 사용하여 객체를 만들고 이것을 활용하여 프로그램을 실행함

        * 클래스의 구성 요소
        * 외부 : 패키지, 임포트, 외부클래스
        * 내부 : 필드, 매서드, 생성자, 이너클래스

        * 객체와 인스턴스
        * 객체 : 그 객체 하나만을 이야기할 때 사용하는 단어
        * 인스턴스 : 클래스와의 관계를 이야기할 때 사용하는 단어

        * 객체 생성 방법
        * 클래스명(자료형) 생성할 객체명 = new 생성자명(); // 일반적으로 클래스명과 생성자명은 동일함
        * A a = new A();
        * 1. 생성자명은 클래스명과 동일해야 한다
        * 2. 생성자는 리턴이 없다 (리턴 타입도 없다)

        * 객체 활용 방법
        * a.m  // 필드 사용
        * a.print(); // 매서드 사용
        */

        // 객체들은 서로 성질을 각각 유지함
        A a = new A();
        System.out.println(a.m);
        a.print();

        A a2 = new A();
        a2.m = 8;
        System.out.println(a2.m);
        a.print();
    }
}

class A{
    int m = 3;
    void print(){
        System.out.println("객체 생성 및 사용");
    }
}