객체를 정의한 것. (틀, 설계도)
클래스의 용도: 객체를 생성하기 위해 사용
실제로 존재하는 것. (제품)
객체 = 속성(변수) + 기능(메소드)
객체 생성은 참조 변수를 통해 객체를 참조하는 식으로 생성Tv t = new TV(); // t는 TV객체를 참조하는 참조변수
클래스로 부터 생성된 객체(=인스턴스, 인스턴스화)
클래스 내에서 인스턴스 변수를 사용
다른 클래스에서 이용 시 객체를 생성하고 호출해야함
참조변수.메소드이름()
- class영역 내에 선언 -> 인스턴스 변수(iv)
- static + 인스턴스 변수(iv) = 클래스 변수(cv, 공유변수)
- 메소드영역 내에 선언 -> 지역 변수(lv)
공통 속성에 대해서는 클래스 변수(cv)로 선언, 개별 속성에 대해서는 인스턴스 변수(iv)로 선언
객체생성 선언 없이 클래스명.메소드이름() 으로 호출가능
한 클래스 내에 같은 이름의 메소드를 여러개 정의
(ex. println)
- 조건: 1. 메소드 이름이 같아야 함
- 매개변수 개수 또는 타입이 달라야 함
- 반환 타입은 관계 없음
- 인스턴스 초기화 메소드(iv 초기화)
- return 값이 없음(void 작성 X)
- 이름이 클래스의 이름과 같아야함
- 모든 클래스는 생성자를 가져야함
기본 생성자: 생성자가 하나도 없을 때만 컴파일러가 자동으로 생성
생성자 this()
- 생성자에서 다른 생성자 호출시 사용
- 다른 생성자 호출 시 '첫줄'에서만 사용
생성자 this()는 참조변수 this와 다른것
- 인스턴스 자신을 가리키는 참조변수
- 인스턴스 메소드 (생성자 포함)에서 사용가능
- 지역변수(lv)와 인스턴스 변수(iv)를 구분할 때 사용
- 복잡한 초기화: static{}
static int[] arr = new int[10]; // 명시적 초기화 static { // 클래스 초기화 for(int i=0; i<arr.length; i++){ arr[i] = (int)(Math.random()*10)+1; } }
객체 자신을 가리키는 참조변수, 인스턴스 메소드 안에서만 사용가능(this와 유사)
- 조상의 멤버와 자신의 멤버를 구별할 때 사용
:조상 = super.x, 자신 = this.x
조상의 생성자를 호출할 때 사용
조상의 멤버는 조상의 생성자를 호출해서 초기화
super(x,y) -> 조상클래스의 생성자를 호출
외부로 부터 데이터를 보호하기 위해 접근제어자를 사용, 내부적으로만 사용하는 부분을 감추기 위해 사용
조상타입 참조변수로 자손 타입 객체를 다루는 것
Tv t = new SmartTV(); //조상 타입 참조변수 t, 자손 타입 객체 SmartTV();
자손 타입의 참조변수로 조상 타입 객체생성 X
하나의 배열에 여러 개의 객체를 담을 수 있음(조상 타입의 배열에 자손들의 객체를 담을 수 있음)
FireEngine fe = new FireEngine(); Car c = (Car)fe;
참조변수가 가리키고 있는 변수의 주소값을 그대로 c 참조변수에 적용하여 fe, c 모두 같은 주소를 가리키게 됨
fe가 사용가능한 iv변수 또는 메소드에 비해 c의 경우는 c의 iv와 메소드만 접근가능함 (리모콘만 바꿈)
참조변수의 형변환이 가능한지 확인하기 위한 연산자, 가능하면 true 반환
오류의 종류
1. 컴파일 에러 : 컴파일 할 때 발생하는 에러
2. 런타임 에러 : 실행 중 발생하는 에러
3. 논리적 에러 : 작성 의도와 다르게 동작
- 런타임 에러 -
- 에러 - 프로그램 코드에 의해 수습될 수 없는 심각한 오류
- 예외 - 프로그램 코드에 의해 수습될 수 있는 미약한 오류