CS/ETC

OOP(Object-oriented programming)

혀니리리 2023. 12. 19. 13:41
728x90

[OOP] 객체지향 프로그래밍(Object Oriented Programming)이란? - 𝝅번째 알파카의 개발 낙서장 (itcode.dev)

 

[OOP] 객체지향 프로그래밍(Object Oriented Programming)이란? - 𝝅번째 알파카의 개발 낙서장

IT 업계에 종사하게 된다면 십중팔구 JAVA, C++, C# 중 하나는 다루게 된다. 국내 IT의 최다 공급이자 수요인 JAVA를 위시한 위 세 가지 언어의 공통점은 전부 객체지향언어라는 점이다. 물론 지금에

blog.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 등 모든 요소를 객체로 다룸)

 

* 장점

- 코드 재사용성 : 모듈화된 객체를 기반으로 코드가 작성되기 때문에, 해당 객체의 특징을 비슷한 다른 로직에도 적용해서 사용하거나, 다른 개발자가 구현한 객체를 가져와 쓰기 용이함.

- 간편한 유지보수 : 객체 수정 시, 해당 객체를 사용하는 모든 로직에 일괄적으로 적용되니, 중복코드에 대한 관리 간단해짐.

객체나 동작이 변경될 경우, 해당 객체나 동작과 연관된 객체만을 찾아 수정하면 됨

- 큰 규모의 프로그래밍에 유리 : 객체, 모듈 단위로 구분되는 특징으로 인해 업무 분장이 쉽고, 각 모듈의 연관성을 도식하기 용이

728x90

'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