1. 객체 & 클래스 & 인스턴스
현실 세계에서 자동차를 만들기 위해서는 설계도를 보고 자동차를 만든다.
객체지향 프로그래밍에서도 설계도를 보고 자동차를 만든다.
이 때, 객체지향 프로그래밍에서 설계도를 Class라고 한다.
- 클래스 (Class) : 객체를 만들어 내기 위한 틀
- 객체가 가지는 공통적인 속성과 행동을 클래스에 정의
- 객체 (Object) : 클래스의 모양 그대로 찍어낸 실체
- 메모리 공간을 갖는 구체적인 실체
- 개발자가 OOP에서 집중해야하는 부분은 객체를 "현실"과 "소프트웨어"의 중간지점을 바라보는 것
- 인스턴스(Instance) : 객체를 실체화 시킨 것
- 객체를 실체화 시킨것
ex) 자동차
객체 : 자동차라는 객체는 핸들, 타이어, 라이트 등이 있고 라이트가 켜지는 메소드, 스피드 조절 메소드 등이 있다.
→ 우리가 구현하고 싶은 어떤것 '객체'
인스턴스 : 어떤 것(자동차)을 만들면 이런 것들(핸들, 타이어, 라이트)을 가지고 이렇게 동작(라이트 메소드, 스피드 메소드)할거야 라고 정의한 것
→ 객체의 생성자를 통해 인스턴스라는 것으로 실체화
참고
2. 인스턴스 멤버와 클래스 멤버
1. 클래스의 멤버는 모든 인스턴스에서 '동일'하다.
2. 인스턴스를 생성하지 않아도 클래스에 직접 접근해 사용가능하다.
변수를 선언할 때 인스턴스 변수 vs 클래스 변수 :
- 인스턴스 변수 : 각각의 객체마다 개별적인 속성을 가져야 할 때
- 클래스 변수 : 모든 객체가 공통적인 속성을 가질 때
(1) 인스턴스 멤버
- 객체를 생성해야 사용 가능
- 인스턴스 필드는 객체마다 따로 존재 (힙 영역)
- 인스턴스 멤버로 선언된 메서드는 클래스 멤버를 사용가능
- 인스턴스 멤버에서도 객체 내부의 인스턴스 멤버에 접근하려면 this를 통해 가능
(2) 클래스 멤버
- 메서드 영역의 클래스와 같은 위치에 고정적으로 위치하고 있는 멤버
- static 키워드로 필드와 메소드 선언
- 클래스 멤버로 선언된 메서드는 인스턴스 멤버 사용 X
3. 클래스의 관계
상속 : is - a ("~은 ~(이)다")
포함 : has - a ("~은 ~을(를) 가지고 있다")
(1) 상속 (is-a)
1. 부모 클래스에 새로운 필드와 메서드가 추가되면 자식 클래스는 이를 상속받아 사용 가능
2. 자식 클래스에 새로운 필드와 메서드가 추가되어도 부모 클래스는 어떠한 영향도 받지 않는다.
→ 자식 클래스의 멤버 개수는 부모 클래스보다 항상 같거나 많다.
- 클래스 간의 상속은 extends 키워드를 사용하여 정의
public class 자식클래스 extends 부모클래스 {
}
- Java는 다중 상속을 허용하지 않는다.
- Object 클래스 : 모든 클래스의 상속계층도 최상위에 있는 조상클래스
- toString(), equals()와 같은 메소드를 정의하지 않고 사용할 수 있었던 이유
(2) 포함 (has - a)
한 클래스의 멤버변수로 다른 클래스 타입의 참조 변수를 선언하는 것
class Circle{
int x;
int y;
int r;
}
class Point{
int x;
int y;
}
class Circle{
Point p = new Point();
int r;
}
→ Circle 클래스의 멤버변수로 다른 클래스 타입 Point를 선언하고 new Point();로 새로운 객체를 생성
- 포함을 이용하면 하나의 거대한 클래스를 작성하는 것보다, 단위별로 여러개의 클래스를 작성 → 이 단위 클래스들을 포함관계로 재사용하여 더욱 간결하고 손쉽게 클래스를 작성할 수 있다.
'TIL' 카테고리의 다른 글
240429 TIL (0) | 2024.04.30 |
---|---|
240426 TIL : 계산기 (0) | 2024.04.26 |
240425 TIL (0) | 2024.04.25 |
240423 TIL 2일차 (0) | 2024.04.24 |
TIL 1일차 : CPU와 메모리 (0) | 2024.04.19 |