객체 지향 프로그래밍(OOP)의 정의는 객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
출처 - 위키백과
이 사전적 의미만 보고 이해가 안 가거나 그래서 객체 지향 프로그래밍은 왜 쓰는 거야? 라는 의문이 들을 수 있다.
일단 객제지향이라 하면 비슷한 변수와 기능(함수)들을 묶어 하나의 객체로 만들어 사용합니다.
객체지향언어의 주요 특징으로는 다음과 같습니다.
- 코드의 재사용성이 높다.
- 코드의 관리가 용이하다.
- 신뢰성이 높은 프로그래밍을 가능하게 한다.
재사용성, 유지보수, 중복된 코드의 제거 세가지 관점에서 보면 이해하기 쉬울 것 입니다.
우선은 왜 객체 지향을 해서 프로그래밍을 해야 하는지 코드로 보여드리겠습니다.
예시로 사람이 초코맛 프로틴을 먹는다라고 프로그램을 구현했습니다. (건강은 소중하니까)
class ProteinChoco {
static int powder = 300;
static int eatProtein(int eat) {
powder -= eat;
return powder;
}
}
public class People {
public static void main(String[] args) {
System.out.println(ProteinChoco.eatProtein(30));
System.out.println(ProteinChoco.eatProtein(50));
}
}
결과값 : 270 출력 , 220 출력
상단의 eatProtein 메소드는 매개변수로 eat을 받아 프로틴을 먹은 후의 결괏값을 반환하게 됩니다.
먹고 난 뒤의 프로틴의 양은 유지되어야 하므로 전역 변수로 선언했습니다.
그런데 만약에 프로틴을 먹는 게 초코맛을 먹는 게 아니라 바닐라맛도 먹고 싶어, 2개의 프로틴 통이 필요한 상황이면 하나의 클래스 가지고는 해결할 수 없습니다.
그래서 이런 상황을 해결하면 바닐라 프로틴이라는 클래스를 만들어 줘야 합니다.
class ProteinChoco {
static int powder = 300;
static int eatProtein(int eat) {
powder -= eat;
return powder;
}
}
class ProteinVainilla {
static int powder = 300;
static int eatProtein(int eat) {
powder -= eat;
return powder;
}
}
public class People {
public static void main(String[] args) {
System.out.println(ProteinChoco.eatProtein(30));
System.out.println(ProteinChoco.eatProtein(50));
System.out.println(ProteinVainilla.eatProtein(30));
}
}
결과값: 270, 220 , 270 출력
만약에 바닐라 프로틴이 아니라. 딸기맛 쿠앤크 맛 등등 여러 가지 맛이 필요할 때마다 클래스를 생성해야 한다면 좋지 않은 방법입니다. 우리에게는 객체 지향 프로그래밍이 있습니다. 이 객체 지향 프로그래밍을 활용해서 우리의 코딩 손실을 막아보도록 하겠습니다.
class Protein{
int powder = 300;
int eatProtein(int eat){
powder -= eat;
return powder;
}
}
public class People {
public static void main(String[] args) {
Protein ProteinChoco = new Protein();
Protein ProteinVainilla = new Protein();
System.out.println(ProteinChoco.eatProtein(30));
System.out.println(ProteinChoco.eatProtein(50));
System.out.println(ProteinVainilla.eatProtein(30));
}
}
결과값: 270, 220 , 270 출력
프로그래밍의 복잡도가 확연하게 줄어들었다!
프로틴 클래스로 만든 초코 프로틴과 바닐라 프로틴을 인스턴스화 하여 각각 객체를 만들었다.
이 객체는 다른 객체의 결과와 상관없이 독립적인 값을 유지한다. 우리가 앞으로 먹을 프로틴의 통수가 늘어나도 또 다른 클래스를 늘리는 게 아니라 간단히 객체를 생성만 된다.
그래서 왜 객체 지향 프로그래밍을 사용하는가?
이처럼 객체 지향 프로그래밍의 특징을 활용하여 프로그램의 복잡도를 낮추기 위해라고 생각할 수 있습니다.
부족한 점이나 질문이 있다면 댓글을 남겨주시면 최선을 다해 답변드리겠습니다!
참고 - https://wikidocs.net/156068
'객체지향프로그래밍' 카테고리의 다른 글
SOLID 5원칙 - DIP 의존관계 역전 원칙(Dependency inversion principle) (0) | 2022.01.21 |
---|---|
SOLID 5원칙 - ISP 인터페이스 분리 원칙(Interface Segregation Principle) (0) | 2022.01.20 |
SOLID 5원칙 - LSP 리스코프 치환 원칙(Liskov Substitution Principle) (0) | 2022.01.19 |
SOLID 5원칙 - OCP 개방 폐쇄 원칙(Open/Closed Principle) (0) | 2022.01.18 |
SOLID 5원칙 - SRP 단일 책임 원칙(Single Responsibility Principle) (2) | 2022.01.18 |