현실에 있는 것들 OR 현실에 없는 것들을 프로그래밍 언어에 추상적인(간략하게 만드는 것) 형태로 비슷하게 만들어 놓은 것
추상 클래스 == 가구 - 사람이 상상해서 그 물건의 특성을 떠올릴 수 있지만 실제로 만들 수 없는것
(EX) 의자는 가구의 구체개념이지 가구 자체가 아니다
구체 클래스 == 의자 - 사람이 상상할 수 있고 제조법이 명확하다
클래스를 통해 Object가 실제화 된것 - 만들어진 의자(new)
객체(object)는 인스턴스(instance)를 포함하는 일반적인 의미
인스턴스화(instantiate, 인스턴스化)
클래스로부터 인스턴스를 생성하는 것
- 자바 객체가 가지고 있는 속성
-> 필드 / 멤버변수- 자바 객체가 가지고 있는 기능
-> 메소드(함수)


- 인스턴스변수
-각 인스턴스의 개별적인 저장공간, 인스턴스마다 다른 값 저장가능
-인스턴스 생성 후, '참조변수.인스턴스변수명'으로 접근
-인스턴스를 생성할 때 생성되고, 참조변수가 없을 때 가비지 컬렉터에 의해 자동제거됨
- 클래스변수
-같은 클래스의 모든 인스턴스들이 공유하는 변수
-인스턴스 생성없이 '클래스이름.클래스변수명'으로 점급
-클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸
- 지역변수
-메서드 내에 선언되며, 메서드의 종료와 함께 소멸
-조건문, 반복문의 블럭{} 내에 선언도니 지역변수는 블럭을 벗어나면 소멸

메서드란?
-작업을 수행하기 위한 명령문의 집합
-어떤 값을 입력받아서 처리하고 그 결과를 돌려준다.
(입력받는 값이 없을 수도 있고 결과를 돌려주지 않을 수도 있다.)
메서드의 장점과 작성지침
-반복적인 코드를 줄이고 코드 관리가 용이
-반복적으로 수행되는 여러 문장을 메서드로 작성
-하나의 메서드는 한가지 기능만 수행하도록 작성하자.
-관련도니 여러 문장을 메서드로 작성한다.

- static은 프로그램을 실행할때 메모리(static영역)에 로딩되고 프로그램을 종요하면 없어진다.
- stack은 함수를 실행할때 메모리(stack영역)에 로딩되고 함수를 종료하며 없어진다.
- heap은 static이 아닌 것들을 부를때 메모리(heap 영역)에 로딩되고 작업 종료 시키면 없어진다
(JVM에서는 필요없는 구간부터 알아서 없애줌)


- 프로그램 실행
- 파일에 만들어 둔 클래스와 static 변수 / 함수가 스태틱 영역에 올라간다
- main 함수가 실행 된다(스택 영역에 올라간다)
- cat 인스턴스가 만들어진다(힙 영역에 올라간다)
- cat.cry메소드가 실행된다(스택 영역에 올라간다)
- cat.cry메소드가 완료된다(스택 영역에서 내려온다)
- cat 인스턴스가 쓰이지 않기 때문에 가비지 컬렉션 된다
(힙 영역에서 내려온다)
7.main함수가 완료된다(스택 영역에서 내려온다)
8.프로그램이 종료된다(스태틱 영역에서 모든 데이터가 내려온다)
static / heap / stack
클래스 -> static
클래스에서 만든 스태틱 함수 -> static
클래스에서 만든 스태틱 아닌 메소드 -> static
클래스로 만든 인스턴스 -> heap
실행 중인 함수 / 메소드 -> static
