클래스는 서로 다른 여러 데이터형을 자유로이 조합하여 만들 수 있는 자료구조
여러 필요한 기능들을 조합해서 '하나'로 묶고 이름을 붙인 것이 '클래스'
클래스를 사용해서 코딩하는 것을 '객체지향형 프로그래밍'이라고 한다.
(객체 = 하나의 묶음)
클래스형 변수를 사용할 때는 먼저 클래스형 변수를 만들고,
그와 동시에 실체인 클래스 인스턴스를 생성해야 한다.

위와 같이 도장이라는 하나의 클래스 통해 도장 자국이라는 여러 인스턴스를 찍을 수 있다.
매일매일 도장 자국의 날짜가 바뀌듯이 인스턴스를 만들 때 값을 변경해서 가질 수 있다.

(Do it! 알고리즘 입문 자바편)
class XYZ {
int x;
long y;
double z;
}
XYZ a = new XYZ();
자바에서 배열 본체와 클래스 인스턴스는 프로그램을 실행할 때
new식으로 생성한다는 공통점이 있다.
이 2가지를 통틀어 객체(object)라고 부른다.
클래스에 대한 내용을 최대한 요약하면,
- 클래스 본체와 멤버
- 멤버(필드,메소드,중첩(nested)클래스,중첩 인터페이스)
- 클래스 초기화, 인스턴스 초기화
- 생성자
그리고 클래스는 다음과 같은 문법 규칙과 특징을 가지고 있다.
- 필드, 메소드, 생성자를 선언할 때 public, protected, private을 지정할 수 있다.
- 메소드, 생성자는 다중으로 정의(오버로드)할 수 있다.
- final로 선언한 필드는 값을 한 번만 대입할 수 있다.
- 생성자는 새로 생성하는 인스턴스를 초기화하기 위해 사용한다.
- 공개 클래스
- 클래스 접근제한자인 public을 붙여 클래스를 선언하면 다른 패키지에서 사용할 수 있는 공개 클래스가 된다.(public class)
- 파이널 클래스
- 클래스 접근 제한자인 final을 붙여 클래스를 선언하면 하위 클래스를 가질 수 없는(다른 클래스가 상속할 수 없는) 파이널 클래스(final class)가 된다.
- 파생 클래스
- A라는 클래스가 직접 상위 클래스가 되려면 선언할 때 extends A를 추가해야한다.
이때 선언한 클래스가 A의 직접 하위 클래스가 되는 것이다.
extends가 없는 클래스의 경우 자동적으로 최상위 클래스인 Object 클래스의 하위 클래스가 된다.
- 인터페이스 구현
- 인터페이스 X를 구현하기 위해서는 선언에 implements X를 추가해야 한다.
class Y implements X {
(--생략--)
}
- 추상클래스
- 클래스 수식자인 abstract를 붙여 클래스를 선언하면 추상 메소드를 가질 수 있는 추상 클래스가 됩니다. 추상 클래스는 불완전한 클래스이므로 인스턴스를 만들 수 없습니다.
- 중첩 클래스
클래스 또는 인터페이스 안에 선언한 클래스는 중첩 클래스가 됩니다.
- 멤버클래스는 그 선언이 다른 클래스 또는 인터페이스 선언에 의해 직접 둘러싸인 클래스입니다.
- 내부 클래스는 명시적으로도 암묵적으로도 정적(static)이라고 선언하지 않은 중첩 클래스입니다. 정적 초기화나 멤버 인터페이스 선언을 할 수 없습니다. 그리고 컴파일을 할 때 상수 필드가 아니면 정적 멤버를 선언할 수 없습니다.
- 지역 클래스는 이름이 주어진 중첩 클래스인 내부 클래스입니다. 어떤 클래스의 멤버도 될 수 없습니다.