클래스와 객체
클래스
- 객체를 만들기 위한 설계도 or 틀
- 객체의 속성(state)과 행동(behavior) 포함
객체
- 클래스 모양 그대로 생성된 실체
- 프로그램 실행 중 생성
- 메모리 공간을 가짐
- =인스턴스(instance)
- 객체들은 클래스에 선언된 동일한 속성을 가지지만, 객체마다 서로 다른 고유한 값으로 구분
클래스 구성
- class 키워드를 사용하여 선언
- 클래스의 구성 요소를 멤버라 함
- 멤버는 필드(멤버 변수)와 메소드(멤버 함수) 두 가지
클래스 선언
- class 키워드로 선언
- { 로 시작하여 } 로 닫으며 중괄호 안에 모든 필드와 메소드 구현
- class Circle은 Circle이라는 이름의 클래스를 선언
- public, private 등 접근 지정자로 접근 권한 표시
필드와 메소드
- 필드(field): 객체 내에 값을 저장하는 멤버 변수
- 메소드(method): 함수, 객체의 행동을 구현
접근 지정자
- public, protected, private, default
- 다른 클래스에서 활용이나 접근이 가능한지 여부 선언
- 접근 지정자를 표기하지 않으면 default
생성자(constructor)
- 클래스의 이름과 동일한 이름의 메소드
- 객체가 생성될 때 자동으로 한 번 호출되는 특별한 메소드
- 개발자는 객체를 초기화하는 데 필요한 코드를 작성
new 연산자와 객체 생성, 레퍼런스
public static void main(String args[]){
Circle pizza; //Circle 객체에 대한 레퍼런스 변수 pizza 선언
pizza = new Circle(); //Circle 객체 생성
pizza.radius = 10; //radius 필드에 10 저장
pizza.name = "자바피자"; //name 필드에 "자바피자" 저장
double area = pizza.getArea(); //pizza 객체의 면적 계산하는 메소드 호출
}
레퍼런스 변수 선언
- 객체를 생성하기 전 객체를 가리킬 레퍼런스 변수를 먼저 선언
- 변수는 [클래스]타입의 객체를 가리킴
Circle pizza; //Circle 타입의 레퍼런스 변수 newCircle 선언
- 위 선언문만으로 Circle 타입의 객체가 생성되지 않음
- 변수 newCircle은 Circle 클래스의 객체에 대한 주소(=레퍼런스)를 가지는 변수일 뿐 객체 자체는 아님
- 레퍼런스 변수만 생성되고 null로 초기화
객체 생성, new 연산자 이용
- 반드시 new 연산자를 사용하여 객체 생성
pizza = new Circle();
- 생성된 Circle 객체의 레퍼런스를 newCircle 변수에 대입
- Circle 타입 크기의 메모리가 할당된 수 Circle() 생성자 코드 실행
Circle pizza = new Circle(); //변수 선언과 객체 생성 동시에 가능
객체 멤버 접근
- 객체의 멤버에 접근할 때는 레퍼런스 변수 뒤에 점(.) 연산자를 붙임
- (레퍼런스.멤버) 형태
pizza.radius = 10; //pizza 객체의 radius 필드에 10 대입
int r = pizza.radius; //변수 r에 pizza.radius의 값인 10 저장
double area = pizza.getArea(); //pizza.getArea() 메소드 호출하여 area 변수에 저장
예제 4-1 반지름과 이름 필드, 면적을 계산하는 메소드를 멤버로 가진 Circle 클래스를 작성하고 Circle 클래스의 객체를 생성하는 프로그램 작성
예제 4-2 너비와 높이를 입력받아 사각형의 면적을 출력하는 프로그램 작성