객체 : 자신의 속성을 가지고 있으면서 식별 가능한 것
(속성=필드, 동작=메소드)
서로 상호 작용하는 수단 = 메소드, 메소드 호출
int result = Calculator.add(10, 20);
집합 - 부품, 자동차
사용 - 사람, 자동차
상속 - 기계, 자동차
설계도 = 클래스 (필드와 메소드가 정의되어 있다)
인스턴스 = 클래스로부터 만들어진 객체
자바의 식별자 작성 규칙에 따라 만들어야 한다
public class Car {
}
객체는 클래스로부터 객체를 생성시키는 연산자이다
Car benz = new Car();
//클래스 변수 = new (클래스); 객체를 생성시키는 연산자
라이브러리 클래스 : 다른 클래스에서 이용할 목적으로 설계
실행 클래스 : 프로그램의 실행 진입경로 main() 메소드 제공
필드 : 객체의 데이터가 저장되는 곳
생성자 : 객체 생성 시 초기화 역할 담당
메소드 : 객체의 동작에 해당하는 실행 블록
필드 : 객체의 고유 데이터(모델, 색깔, 최고속도), 부품 객체(현재속도, 엔진 회전수), 상태 정보(기체, 엔진, 타이어)를 저장하는 곳 (클래스 멤버 변수)
필드의 값을 읽고 변경하고 작업
우선적으로 클래스로부터 객체를 생성한 뒤 필드를 사용해야 한다.
필드나 메소드를 사용하고자 할 때 → 객체 접근 연산자(.) 사용
객체 생성시 초기화를 담당, 몯느 클래스에 반드시 하나 이상 존재
생성자 : new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당
기본적으로 선언하지 않아도 생성되지만 객체를 다양한 값으로 초기화하기 위해 명시적으로 선언함
Car(String color, int cc) {
}
this는 객체 자신을 참고
생성자 오버로딩 : 다양한 방법으로 객체를 생성할 수 있도록 매개변수를 달리하는 생성자를 여러 개 선언하는 것
필드 초기화 내용이 비슷한 경우 필드 초기화 내용은 한 생성자에만 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법으로 개선 → 반드시 상속자의 첫 줄에서만 허용
선언부(메소드 시그니처) : 리턴 타입 / 메소드 이름 / 매개변수 선언 작성
실행 블록 : 실행할 코드 작성
리턴 타입 : 리턴값이 있느냐 없느냐(void)에 따라, 리턴값이 무엇이냐에 따라 기술한다
자바 식별자 규칙에 맞게 작성 (소문자 등), 길어도 괜찮음
매개값은 반드시 매개변수의 타입에 부합되는 값이어야 한다
매개변수의 개수를 알 수 없을 때는 매개변수를 배열 타입으로 선언
메소드 선언에 리턴 타입이 있는 메소드는 반드시 리턴문을 사용하여 리턴값을 지정해야 한다
리턴문 이후의 실행문은 결코 실행되지 않는다
리턴값이 없는 메소드 → return;으로 메소드 실행 강제 종료
클래스 외부에서 호출할 경우 → 우선 클래스로부터 객체를 생성한 뒤 참조 변수를 이용해서 메소드를 호출해야 한다. 도트(.) 연산자를 사용해서 메소드를 호출한다
클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것, 오버로딩 : 많이 싣는 것
조건 : 매개변수의 타입, 개수, 순서 중 하나가 달라야 한다, 오버로딩된 메소드를 호출할 경우 JVM은 매개값의 타입을 보고 메소드를 선택합니다.
매개값을 다양하게 받아 처리할 수 있도록 하기 위해 만들었다
인스턴스 멤버 : 객체마다 가지고 있는 멤버
정적 멤버 : 클래스에 위치시키고 객체들이 공유하는 멤버
인스턴스 필드 : 객체마다 다른 존재
인스턴스 메소드 : 메소드 영역에 저장되고 공유
정적 멤버 : 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 클래스
static을 붙여 선언, 객체 선언을 할 필요없이 클래스 이름에 도트(.) 연산자로 사용
인스턴스 필드나 인스턴스 메소드 사용은 불가
main() 메소드도 동일한 규칙이 적용된다
전체 프로그램에서 단 하나의 객체만 만들도록 실행할 때 사용
생성자를 외부에서 호출할 수 없도록 생성자 앞에 private 접근 제한자를 붙여줌
정적 필드 선언, 정적 메소드 getInstance()로 외부에서 객체 얻음
초기값이 저장되는 이것이 최종적인 값이 되어 프로그램 실행 도중에 수정할 수 없음
static final double EARTH_RADIUS = 6400;
패키지의 물리적인 형태는 파일 시스템의 폴더, 클래스의 일부분으로, 클래스를 유일하게 만들어주는 식별자 역할
package com.mycompany;
public class Car {...}
사용하고자 하는 클래스 또는 인터페이스가 다른 패키지에 소속되어 있다면, import 문으로 대상을 사용할 것임을 컴파일러에게 알려준다.
서로 다른 패키지에 동일한 클래스 이름이 존재하는 경우 둘 다 사용하기 위해서는 전체 이름을 코드에 서술해야 한다.
접근을 제어하기 위해서 사용
다른 패키지에서 사용하지 못하게 막거나 객체 생성과 필드, 메소드 사용을 막기 위해 사용
private ⊂ default ⊂ protected ⊂ public
private ⊂ default ⊂ protected ⊂ public
private ⊂ default ⊂ protected ⊂ public
필드는 외부에서 접근할 수 없게 막고 메소드는 공개해서 메소드를 통해 필드에 접근하도록 유도