클래스와 객체
-
클래스
- 객체의 속성(멤버변수)와 행위(메서드) 선언
- 객체의 설계도 혹은 틀
-
객체
- 클래스의 틀로 찍어낸 실체
- 프로그램 실행 중에 생성되는 실체
- 메모리 공간을 갖는 구체적인 실체
- 인스턴스(instance)라고도 부름
클래스 선언과 컴파일
- 소스파일 생성 : 클래스이름.java (대소문자 주의)
- 소스 작성
public class 클래스이름{}
--- 컴파일(javac.exe)
---> 클래스이름.class
- 소스 파일당 하나의 클래스를 선언하는 것이 관례
- 두 개 이상의 클래스도 선언 가능
- 소스파일 이름과 동일한 클래스만 public으로 ㅅ너언 가능
- 선언한 개수만큼 바이트 코드 파일이 생성
new 연산자
- 객체 생성 역할
new 클래스()
클래스()
는 생성자를 호출하는 코드
- 생성된 객체는 힙 메모리 영역에 생성
- new 연산자는 객체를 생성 후, 객체 생성 번지 리턴
클래스 변수
- new 연산자에 의해 리턴 된 객체의 번지 저장 (참조 타입 변수)
- 힙 영역의 객체를 사용하기 위해 사용
클래스 변수 = new 클래스()
ex) Car car = new Car();
클래스의 용도
- 라이브러리(API) 용
- 자체적으로 실행되지 않음
- 다른 클래스에서 이용할 목적으로 만든 클래스
- 실행용
- main() 메소드를 가지고 있는 클래스로 실행할 목적으로 만든 클래스
- 1개의 애플리케이션 = (1개의 실행클래스) + (n개의 라이브러리 클래스)
클래스의 구성 멤버
- 필드 : 객체의 데이터가 저장되는곳 (
변수
)
- 생성자 : 객체 생성시(자동실행) 초기화 역할 담당
- 메소드 : 객체의 동작에 해당하는 실행 블록(
함수
)
- 혼자 동작하는것 = 함수, 클래스에 포함되어있는것 = 메소드
- 클래스 멤버 메소드
void methodName() { ... }
필드의 내용
- 객체의 고유 데이터
- 제작회사
String company;
- 모델
String model;
- 색깔
String color;
- 최고속도
int maxSpeed;
- 객체가 가져야 할 부품 객체
- 현재속도
int speed;
- 엔진회전수
int rpm;
- 객체의 현재 상태 데이터
- 차체
Body body;
- 엔진
Engine engine;
- 타이어
Tire tire;
필드 선언
이제까지 변수 선언과 동일함, 멤버변수의 사용 -> 메소드 안에서만 사용
- 타입 필드 [ = 초기값 ];
String company = "현대자동차";
String model = "그랜저";
필드의 기본 초기값
- 초기값 지정되지 않은 필드
- 객체 생성시 자동으로 기본값으로 초기화
- char : \u0000 (빈 공백)
- int : 0
- float : 0.0F
- boolean : false
- (참조타입) - 배열, 클래스, 인터페이스 : null
필드 사용
- 필드 값을 읽고, 변경하는 작업을 말한다
- 필드 사용 위치
- 객체 내부 : "필드이름" 으로 바로 접근
- 객체 외부 : "변수.필드이름" 으로 접근
생성자
- new 연산자에 의해 호출되어 객체의 초기화 담당 (멤버변수의 초기화)
new 클래스();
- 필드의 값 설정
- 메소드 호출해 객체를 사용할 수 있도록 준비하는 역할 수행
- 객체가 생성되는 순간에 자동 호출
- 클래스 이름과 동일한 메서드를 생성자라고 함, 생성자는 리턴타입이 없음
기본(default) 생성자
- 매개변수가 없고, 아무 작업 없는 생성자를 기본 생성자라고 함
- 클래스 내부에 생성자가 1개도 없을 경우, 컴파일러가 기본생성자를 자동 생성함 -> 기본 생성자
- 모든 클래스는 생성자가 반드시 존재하며 하나 이상 가질 수 있음
메소드란?
- 객체의 동작(기능)
- 호출해서 실행할 수 있는 중괄호 {} 블록
- 메소드 호출하면 중괄호 {} 블록에 있는 모든 코드들이 일괄 실행
메소드 선언
리턴타입 메소드이름 ([매개변수선언, ...]) { ... }
메소드 이름
메소드 리턴 타입
- 메소드 실행된 후 리턴하는 값의 타입
- 메소드는 리턴값이 있을 수도 있고 없을 수도 있음
메소드 매개 변수