## 객체지향 프로그래밍 이해하기
📌 현실 세계에서 어떠한 제품을 만들기 위해 부품들을 하나씩 조립해서 완성시키는 것처럼 소프트웨어 또한 필요한 부품들을 만들고 하나씩 조립해서 하나의 완성된 프로그램을 만들 수 있는데 이러한 기법을 ‘객체지향 프로그래밍’이라고 부릅니다.
- 우리는 소프트웨어에서의 부품을 ‘객체’라고 표현하는데 이 객체가 무엇인지 살펴보겠습니다.
- 객체란?
- 객체는 세상에 존재하는 물체를 뜻하며 식별이 가능한 것을 의미합니다.
- 예를 들자면 물리적으로 존재하는 자동차, 도서관, 계산기를 객체라 볼 수 있습니다.
- 강의, 배달 주문, 운동과 같은 개념적인 것 또한 식별이 가능하기 때문에 객체라 볼 수 있습니다.
- 자동차를 기반으로 하여 객체에 대해 좀 더 자세하게 살펴보겠습니다.
- 객체는 속성과 행위로 구성이 되었습니다.
- 자동차의 속성과 행위를 표현해 보겠습니다.
- 자동차는 회사, 모델, 색상, 가격, 속도 등의 속성을 가질 수 있습니다.
- 자동차는 가속, 브레이크, 기어 변속, 조명, 경적 등의 행위를 가질 수 있습니다.
- Java에서는 이러한 속성과 행위를 필드와 메서드로 정의하여 구현할 수 있습니다.
📌 클래스는 객체를 생성하기 위한 설계도라고 배웠습니다.
- 클래스의 구성 멤버에는 필드, 생성자, 메서드가 있습니다.
📌 우리가 클래스를 만들기 위해서는 4가지 STEP 이 필요합니다.
1. 만들려고 하는 설계도를 선언합니다.(클래스 선언)
2. 객체가 가지고 있어야 할 속성(필드)을 정의합니다.
3. 객체를 생성하는 방식을 정의합니다.(생성자)
4. 객체가 가지고 있어야 할 행위(메서드)를 정의합니다.
클래스 선언
public class Car {}
String company; // 자동차 회사
String model; // 자동차 모델
String color; // 자동차 색상
double price; // 자동차 가격
double speed; // 자동차 속도 , km/h
char gear; // 기어의 상태, P,R,N,D
boolean lights; // 자동차 조명의 상태
객체 생성
new Car();
- 객체 생성 연산자인 ‘new’를 사용하면 클래스로부터 객체를 생성할 수 있습니다.
- new 연산자 뒤에는 해당 클래스의 생성자 호출 코드를 작성합니다.
- 형태가 `Car();`즉, 기본 생성자의 형태와 같기 때문에 new 연산자에 의해 객체가 생성되면서 기본 생성자가 호출됩니다.
📌 필드는 객체의 데이터를 저장하는 역할을 합니다.
- 객체의 필드는 크게 고유한 데이터, 상태 데이터, 객체 데이터로 분류할 수 있습니다.
- 자동차 객체는 4개의 고유한 데이터와 3개의 상태 데이터 그리고 3개의 객체 데이터를 가질 수 있습니다.
- 우리가 처음 소프트웨어의 부품을 객체라 표현한다고 배웠습니다.
- 이 3개의 객체 데이터를 자동차를 만들기 위한 부품 데이터라고 이해해도 좋습니다.
📌 우리가 정의하여 선언한 클래스의 필드들은 기본적으로 초기값을 제공하지 않을 경우 객체가 생성될 때 자동으로 기본값으로 초기화됩니다.
- 초기값을 제공하는 방법은 ‘필드 타입 필드명 = 값;’ 이렇게 직접 초기화할 수 있습니다.
- `String model = "Gv80";`
📌 메서드는 객체의 행위를 뜻하며 객체 간의 협력을 위해 사용됩니다.
- 메서드의 행위를 정의하는 방법은 블록{ } 내부에 실행할 행위를 정의하면 됩니다.
리턴타입 메서드명(매개변수, ...) {
실행할 코드 작성
}
📌 멤버 = 필드 + 메서드
- 인스턴스 멤버 = 인스턴스 필드 + 인스턴스 메서드
- 클래스 멤버 = 클래스 필드 + 클래스 메서드
📌 인스턴스 멤버 & 클래스 멤버
- 필드와 메서드는 선언하는 방법에 따라서 인스턴스 멤버와 클래스 멤버로 구분할 수 있습니다.
- 인스턴스 멤버는 객체 생성 후에 사용할 수 있고 클래스 멤버는 객체 생성 없이도 사용할 수 있습니다
📌 클래스는 Java의 클래스 로더에 의해 메서드 영역에 저장되고 사용됩니다.
- 이때 클래스 멤버란 메서드 영역의 클래스와 같은 위치에 고정적으로 위치하고 있는 멤버를 의미합니다.
- 따라서 클래스 멤버는 객체의 생성 필요 없이 바로 사용이 가능합니다.
'java' 카테고리의 다른 글
Java (0) | 2024.07.31 |
---|---|
getter&setter (0) | 2024.07.29 |
list, map (1) | 2024.07.25 |
연산자, 조건문 (Sql 조금) (1) | 2024.07.24 |
JVM 공통 실행 환경 (6) | 2024.07.22 |