: 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별 가능한 것을 말한다.
객체는 속성과 동작으로 구성되어 있다.
속성
: 이름, 나이, 색깔, 모델명동작
: 걷다, 웃다, 달린다, 멈춘다자바는 이 속성과 동작을 각각 필드 (field)
와 메서드 (method)
라고 부른다.
객체 모델링 (object medeling)
: 현실 세계의 객체를 소프트웨어 객체로 설계하는 것객체 모델링은 현실 세계 객체의 속성과 동작을 추려내어 소프트웨어 객체의 필드와 메서드로 정의하는 과정이라고 볼 수 있다.
현실 세계에서 일어나는 모든 현상은 객체와 객체 간의 상호작용으로 이루어져 있다.
소프트웨어에서도 마찬가지.
객체들은 각각 독립적으로 존재하고, 다른 객체와 서로 상호작용하면서 동작한다.
이 때 객체들 사이의 상호작용 수단은 메서드
이다.
객체가 다른 객체의 기능을 이용하는 것이 바로 메서드 호출
이다.
메서드 호출은 다음과 같은 형태를 띄고 있다.
리턴값 = 전자계산기객체.메서드(매개값1, 매개값2, ...);
L______1.________| L_________2.________|
.
연산자를 붙이고 메서드 이름을 기술하면 된다. 도트 연산자는 객체의 필드와 메서드에 접근할 때 사용한다.10
과 20
을 주고 더하기 기능을 이용한다고 할 때 10
과 20
이 더하기 기능의 매개값이다. 리턴값은 메서드가 실행되고 난 후 호출한 곳으로 돌려주는 값이다.다음은 자바 코드로 본 메서드 호출이다.
int result = Calculator.add(10, 20);
//리턴한 값을 int변수에 저장
객체는 개별적으로 사용될 수도 있지만, 대부분 다른 객체와 관계를 맺고 있다.
관계의 종류와 예시는 다음과 같다.
집합 관계
: 하나는 부품, 하나는 완성품사용 관계
: 객체 간의 상호작용상속 관계
: 상위(부모) 객체를 기반으로 하위(자식) 객체를 생성하는 관계집합관계
라고 볼 수 있다.사용관계
라고 볼 수 있다.상속 관계
에 있다고 볼 수 있다.객체 지향 프로그래밍
: 만들고자 하는 완성품인 객체를 모델링하고, 집합 관계에 있는 부품 객체와 사용 관계에 있는 객체를 하나씩 설계한 후 조립하는 방식으로 프로그램을 개발하는 기법
(class)
: 설계도의 개념
클래스에는 객체를 생성하기 위한 필드와 메서드가 정의되어 있다.
(instance)
: 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스
라고 한다.
자동차 객체는 자동차 클래스의 인스턴스인 셈이다.
인스턴스 화
: 클래스로부터 객체를 만드는 과정
동일한 설계도로 여러 대의 자동차를 만드는 것과 동일하다.
사용하고자 하는 객체를 구상했다면 그 객체의 대표 이름을 하나 결정하고 이것을 클래스 이름으로 정한다.
예시를 들어보자.
Person
Car
클래스 이름은 자바의 식별자 작성 규칙에 따라서 만들어야 한다.
$
_
외의 특수 문자는 사용할 수 없다.public class 클래스이름 {
}
//차 클래스 생성
public clas Car {
}
//두 개 이상의 클래스 선언
public class Car {
}
public class Tire {
}
클래스로부터 객체를 생성하려면 다음과 같이 new 연산자
를 사용하면 된다.
new 클래스();
new
: 클래스로부터 객체를 생성시키는 연산자
생성자는 클래스()
형태를 가지고 있다.
new 연산자
로 생성된 객체는 메모리 힙 (heap)
영역에 생성된다.
객체 지향 프로그램에서 메모리 내에 생성된 객체의 위치를 모르면 객체를 사용할 수 없다. 따라서 new 연산자
는 힙 영역에 객체를 생성시킨 후 객체의 번지를 리턴하도록 되어 있다.
이 주소를 클래스 변수에 저장해두면 변수를 통해 객체를 사용할 수 있다.
//클래스로 선언된 변수에 new연산자가 리턴한 객체의 번지를 저장
클래스 변수;
변수 = new 클래스();
//클래스 변수 선언과 객체 생성을 1개의 실행문으로 작성
클래스 변수 = new 클래스();
예제를 통해 클래스 선언부터 생성까지 익혀보자.
//클래스 선언
package sec01.exam01;
public class Student {
}
//클래스로부터 객체 생성
package sec01.exam01;
public class StudentExample {
//라이브러리로서의 코드(필드, 생성자, 메서드)
//실행하기 위한 코드
public static void main(String args[]) {
Student s1 = new Student();
System.out.println("s1변수가 Student 객체를 참조합니다.");
Student s2 = new Student();
System.out.println("s2변수가 Student 객체를 참조합니다.");
}
}
//실행결과
s1변수가 Student 객체를 참조합니다.
s2변수가 Student 객체를 참조합니다.
Student
와 StudentExample
클래스의 용도클래스에는 두 가지의 용도가 있다.
API : Application Program Interface
용라이브러리 클래스는 다른 클래스에서 이용할 목적으로 설계된다.
실행 클래스는 프로그램의 실행 진입점인 main() 메서드
를 제공하는 역할을 한다.
클래스에는 객체가 가져야 할 구성 멤버가 선언된다.
Field
: 객체의 데이터가 저장되는 곳Constructor
: 객체 생성 시 초기화 역할 담당Method
: 객체의 동작에 해당하는 실행 블록이 구성 멤버들은 생략되거나 복수의 개수로 작성될 수 있다.
public class ClassName {
//필드
int fieldname;
//생성자
ClassName() { .. }
//메서드
void methodName() { .. }
}
: 객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳
선언 형태는 변수와 비슷하지만 필드를 변수라고 부르지는 않는다.
변수
는 생성자와 메서드 내에서만 사용되고 생성자와 메서드가 실행 종료되면 자동으로 소멸된다.필드
는 생성자와 메서드 전체에서 사용되며 객체가 소멸하지 않는 한 객체와 함께 존재한다.: new 연산자
로 호출되는 특별한 중괄호 { }
블록
메서드와 비슷하게 생겼지만 클래스 이름
으로 되어 있고 리턴 타입이 없다.
: 객체의 동작에 해당하는 중괄호 { }
블록
: 객체 간의 데이터를 전달하는 수단
메서드는
클래스
: 객체를 만들기 위한 설계도객체
: 클래스로부터 생성되며 new 클래스()
로 생성new 연산자
: 객체 생성 연산자, 생성자를 호출하고 객체 생성 번지를 리턴클래스 변수
: 클래스로 선언한 변수를 말하며 해당 클래스의 객체 번지가 저장됨인스턴스
: 객체는 클래스의 인스턴스임클래스 멤버
: 클래스에 선언되는 멤버는 필드
생성자
메서드
가 있음