• 객체를 캡슐로 포장하여 내부를 볼 수 없게 하는 것
• 외부의 접근으로부터 객체를 보호하는 특징
• 객체의 모양을 선언한 틀 (캡슐화)
• 필드(멤버 변수)와 메소드(멤버 함수)는 모두 클래스 내에 구현한다.
• 객체의 속성(state)과 행동(behavior)을 포함한다.
public class Circle {
public int radius; // Circle의 반지름, 멤버 변수
public String name; // Circle의 이름, 멤버 변수
public Circle() { // Circle의 생성자
}
public double getArea() { // Circle의 멤버 함수
return 3.14 * redius * radius;
}
}
class Circle
• class 키워드로 선언
• { } 안에 멤버 변수와 멤버 함수를 구현한다.
• Circle 이라는 이름의 클래스를 선언한 것
• 필드(field) : 객체 내에 값을 저장하는 멤버 변수
• 메소드(method) : 객체의 행동을 구현하는 함수
• 필드 또는 메소드 앞에 붙이며, 다른 클래스의 접근 가능을 표시한다.
• public : 클래스의 접근 권한, 다른 클래스에서 Circle 클래스에 접근 가능
public Circle() {
}
• 메소드
• 생성자는 여러 개 작성할 수 있다. (오버로딩)
• 생성자는 리턴 타입을 지정하지 않는다.
• 생성자 메소드의 이름은 클래스의 이름과 동일하다.
• 객체를 생성할 때 자동으로 한 번 호출된다.
• 처음 객체를 초기화할 때 필요한 내용을 작성한다.
• 매개 변수가 없다.
• 단순 리턴만 하는 생성자이다.
• 디폴트 생성자라고도 한다.
• 생성자를 하나도 작성하지 않는다면 컴파일러가 자동으로 삽입한다.
※ 생성자를 하나라도 작성한다면 기본 생성자는 자동으로 삽입되지 않는다.
• 객체 자신에 대한 레퍼런스
• 컴파일러가 자동으로 관리한다.
• this.멤버 형태로 사용한다.
• 객체의 멤버 변수와 메소드의 변수 이름이 같은 경우에 필요한다.
• 다른 메소드를 호출 시 객체가 자신의 레퍼런스를 전달할 경우 사용한다.
• 메소드가 객체 자신의 레퍼런스를 반환할 때 사용한다.
public class Circle {
public int radius;
public String name;
public Circle() { // 디폴트 생성자
this.radius = 10;
}
public Circle(int radius) {
this.radius = radius;
}
double getArea() {
return 3.14 * this.radius * this.radius;
}
}
• 클래스의 모양에 따라 생성된 실체 (instance)
• 객체 내 데이터에 대한 보호, 외부의 접근을 제한
• 프로그램 실행 중에 생성되는 실체
• 메모리 공간을 갖는 구체적인 실체
• 인스턴스(instance)
• 객체는 반드시 new 키워드를 통해서 생성해야 한다.
• new 키워드 : 객체의 생성자를 호출
• 객체에 대한 레퍼런스 변수를 선언한다.
• 객체를 생성
• 클래스의 타입 크기의 메모리를 할당한다.
• 객체 내에 있는 생성자를 실행한다.
• '.' 연산자를 사용
Circle dount; // 레퍼런스 변수를 선언
donut = new Circle(); // new 연산자를 이용한 객체 생성
donut.radius = 10; //
donut.name = "도넛"; // dot(.) 연산자를 이용환 객체 멤버 접근
double donutArea = donut.getArea();
• 객체 지향의 특성 중 하나
• 상위 개체의 속성을 하위 개체가 물려받음
• 하위 개체가 상위 개체의 속성을 모두 가지는 관계를 형성
• ex) 유전적 상속 관계
• 자식 클래스가 부모 클래스의 속성을 물려받아 클래스의 기능을 확장한다.
• 부모 클래스 : 슈퍼 클래스
• 자식 클래스 : 서브 클래스, 부모 클래스를 재사용하여 새로운 특성을 추가
※ 자바는 클래스 다중 상속이 없다.
※ 인터페이스 다중 상속은 허용
• 객체 지향의 특성 중 하나
• 같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록 구현하는 것
• 같은 이름이지만 다르게 동작하는 여러 메소드
• 매개변수의 개수나 타입이 서로 다르다.
• 리턴 타입은 오버로딩과 관련없다.
class MethodOverloading {
public int getSum(int i, int j) {
return i + j;
}
public int getSum(int i, int j, int k) {
return i + j + k;
}
}
• 슈퍼 클래스의 메소드를 서브 클래스마다 다르게 구현하는 것
• 클래스의 멤버 함수
• 자바의 모든 메소드는 클래스 안에 있어야한다.(캡슐화)
• public
• private
• protected
• 디폴트(접근 지정자 생략)
• 메소드가 반환하는 값의 데이터 타입
public double getArea(int radius) { // 접근 지정자, 리턴 타입, 메소드 이름, (메소드 인자)
return 3.14 * radius * radius; // 메소드 코드
}
1. 기본 타입 값 전달
• 값이 복사되어서 전달된다.
• 메소드의 매개변수가 변경되어도 호출한 실제 인자 값은 변경되지 않는다.
• byte, int, double 등
public double getArea(int radius) {
return 3.14 * radius * radius;
}
2. 객체 또는 배열 전달
• 객체나 배열의 레퍼런스를 전달 (객체 또는 배열이 복사되어 전달되는 것이 아니다.)
• 메소드의 매개변수와 호출한 실제 객체나 배열을 공유하는 것
public void increaseRadius(Circle c) {
c.radius++;
}