[OOP] 객체지향 프로그래밍(Object Oriented Programming)이란? - 𝝅번째 알파카의 개발 낙서장 (itcode.dev)
초딩이 알아듣도록 이해
* 객체: 프로그램 동작의 주체가 되는 요소.
(유/무형을 가리지 않음. 실체가 명확한 것일 수도 있고, 무형의 개념일 수도 있음)
모든 객체는 상태와 동작을 가진다.
ex) TV의 색, 인치, 가격 -> TV가 가진 상태
TV 채널이동, 다시보기, 넷플릭스 연결 -> TV의 기능
TV -> 객체
/**
* 자동차 클래스
*
* @author RWB
* @since 2021.08.05 22:06:24
*/
public class Car
{
// 시동 여부
private final boolean IS_STARTED = false;
// 최대 속력
private final int MAX_SPEED;
// 현재 속력
private int speed;
/**
* Car 생성자 함수
*
* @param maxSpeed: [int] 최대 속도
*/
public Car(int maxSpeed)
{
MAX_SPEED = maxSpeed;
}
/**
* 시동 결과 반환 함수
*
* @return [boolean] 시동 결과
*/
public boolean startUp()
{
return !IS_STARTED;
}
/**
* 시동 종료 결과 반환 함수
*
* @return [boolean] 시동 종료 결과
*/
public boolean shutdown()
{
return IS_STARTED;
}
/**
* 현재 속도 반환 함수
*
* @return [int] 현재 속도
*/
public int getSpeed()
{
return speed;
}
/**
* 가속 함수
*
* @param amount: [int] 속도
*/
public void upSpeed(int amount)
{
// 시동이 걸렸을 경우
if (IS_STARTED)
{
// 가속된 값이 최대 속도를 넘지 않을 경우
if (MAX_SPEED >= speed + amount)
{
speed += amount;
}
// 가속된 값이 최대 속도를 넘을 경우
else
{
speed = MAX_SPEED;
}
}
}
/**
* 감속 함수
*
* @param amount: [int] 속도
*/
public void downSpeed(int amount)
{
// 시동이 걸렸을 경우
if (IS_STARTED)
{
// 감속된 값이 0보다 클 경우
if (0 <= speed - amount)
{
speed -= amount;
}
// 감속된 값이 0보다 작을 경우
else
{
speed = 0;
}
}
}
}
=> 자동차라는 현실의 객체를 매우 간간한 형태로 구현한 클래스
* 멤버변수(상태)
- IS_STARTED : 자동차 시동 여부
- MAX_SPEED: 최대 속도
- SPEED: 현재 속도
* 메소드(동작)
- startUp: 엔진 시동
- shutdown: 엔진 정지
- getSpeed : 현재 속도 표시
- upSpeed : 가속
- downSpeed : 감속
* 객체지향 프로그래밍: 객체를 통해 코드를 구성하는 방법론
객체의 상호작용을 코드로 나타냄
(JAVA에서는 String, HashMap 등 모든 요소를 객체로 다룸)
* 장점
- 코드 재사용성 : 모듈화된 객체를 기반으로 코드가 작성되기 때문에, 해당 객체의 특징을 비슷한 다른 로직에도 적용해서 사용하거나, 다른 개발자가 구현한 객체를 가져와 쓰기 용이함.
- 간편한 유지보수 : 객체 수정 시, 해당 객체를 사용하는 모든 로직에 일괄적으로 적용되니, 중복코드에 대한 관리 간단해짐.
객체나 동작이 변경될 경우, 해당 객체나 동작과 연관된 객체만을 찾아 수정하면 됨
- 큰 규모의 프로그래밍에 유리 : 객체, 모듈 단위로 구분되는 특징으로 인해 업무 분장이 쉽고, 각 모듈의 연관성을 도식하기 용이
'CS > ETC' 카테고리의 다른 글
순수 가상함수, 일반 가상함수 (0) | 2023.12.19 |
---|---|
FSM(Finite-state machine) (0) | 2023.12.19 |
Call by Value Vs Call by Reference (0) | 2023.10.01 |
C++과 C#의 차이 (+ 속도차이) (0) | 2023.09.27 |
추상클래스와 interface 차이 (용도차이) (0) | 2023.09.27 |