
안녕하세요 오늘은 객체지향프로그래밍(OOP)에 대해서 포스팅 해보겠습니다.
그럼 객체지향프로그래밍을 설명하기 전에 먼저 객체란 무엇인가에 대해부터 알고 보시면 좋을 것 같습니다.
현실세계에 존재하거나 생각할 수 있는 것들이 객체다 <- 이 말은 학교에서 자바를 배우며 책에서 봤지만 너무 추상적이고 범위가 넓어 잘 이해가 되지 않앗습니다.
하지만 틀린 설명도 아닙니다.
예를 들어 설명을 하면
객체 -> 이 글을 작성하는 작성자, 보고 있는 여러분 등 또한 객체입니다.
프로그래밍을 떠나서 작성자, 독자 가 가지고 있는 개개인의 특성, 동작 등이 존재합니다.
특성 -> 키,몸무게,성별
동작 -> 앉다, 키보드를 친다, 글을 작성한다
이러한 개념들을 프로그래밍 세계로 옮기면 어떻게 되냐면
자 그러면 여기서 궁금증이 생기실 수 잇습니다.
객체는 작성자, 특성은 작성자의 특성, 함수는 작성자가 행하는 동작을 의미한다면 객체가 클래스와 변수를 포함하는 단위인가에 대한 궁금증이 생기실겁니다.
정확하게 말하면 객체는 특정 클래스를 기반으로 생성되며, 이 클래스는 객체의 '상태'를 표현하는 변수와 '행동'을 표현하는 함수(메서드)를 포함합니다.
클래스를 이해하기 가장 쉬운 방법은 '설계도', '틀' 로 생각하시면 이해하기 쉽습니다.
예를 들어, '자동차'라는 클래스를 만들었다고 가정해봅시다.
이 클래스는 '색상', '브랜드', '모델' 등의 멤버 변수(상태를 나타내는)와 '가속', '정지', '방향 전환' 등의 함수(행동을 나타내는)를 포함할 수 있습니다.
그러나 클래스 자체는 아무런 '실체'를 가지지 않습니다. 즉, '자동차' 클래스는 단순히 '자동차가 무엇인지'를 설명하는 청사진일 뿐입니다. 실제 '자동차' 객체를 만들려면, 이 청사진을 기반으로 '인스턴스화' 과정을 거쳐야 합니다.
인스턴스 -> 공장을 돌리다(설계도에 따라 실제 자동차를 만든다)
즉, 클래스를 기반으로 실제로 메모리에 생성된 객체
예를 들어, '테슬라 모델 S'와 '포르쉐 911'을 각각 '자동차' 클래스의 인스턴스로 생성할 수 있습니다. 이들 각각의 객체는 동일한 클래스를 기반으로 하지만, 상태(색상, 브랜드, 모델 등)는 서로 다를 수 있습니다. 그리고 이들 객체는 클래스에서 정의한 '가속', '정지', '방향 전환' 등의 함수를 사용하여 행동할 수 있습니다. 이렇게 생성된 각각의 '자동차'를 객체라고 합니다.
class Car { //설계도
String color; //변수
String brand;
String model;
void accelerate() { /* ... */ } //함수
void stop() { /* ... */ }
void turn() { /* ... */ }
}
Car teslaModelS = new Car(); //인스턴스화
teslaModelS.color = "Red";
teslaModelS.brand = "Tesla";
teslaModelS.model = "Model S";
Car porsche911 = new Car();
porsche911.color = "Black";
porsche911.brand = "Porsche";
porsche911.model = "911";
객체지향 프로그래밍(OOP)의 핵심은 현실 세계의 객체를 프로그래밍 세계에 표현하는 것입니다. 이를 위해 클래스라는 '설계도'를 사용하여 객체의 상태와 행동을 정의하고, 클래스를 기반으로 실제 객체(인스턴스)를 생성합니다.
OOP는 현실 세계의 복잡성을 관리하는 데 도움을 주며, 코드의 재사용성과 유지보수성을 향상시킵니다. 특히, 같은 클래스를 기반으로 다양한 인스턴스를 생성함으로써 코드의 중복을 줄이고, 각 인스턴스가 독립적으로 동작할 수 있도록 합니다.
다음 포스팅에서는 OOP의 핵심 원칙인 캡슐화, 상속, 다형성에 대해 자세히 알아보도록 하겠습니다. 이해가 어려운 부분이 있거나 궁금한 점이 있으시다면 언제든지 댓글로 남겨주세요!
잘 봤습니다. 좋은 글 감사합니다.