AOP에 대한 포스트를 할려고 하다가 우선적으로 OOP에 대한 설명이 필요 할 것 같아 OOP에 대하여 간단하게 정리해보자!
그래서 OOP란?
1. JAVA공부 책을 보면 첫페이지 부터 강조하는 것
2. 객체지향 프로그래밍
3. 그럼 객체가 모야?
4. 객체를 가지고 어떻게 프로그래밍을 하겠다는거야?
실무 프로젝트를 하며 필자의 경험을 토대로 객체지향프로그래밍이 무엇인지 작성해보겠다.
일단 객체(Object)에 대해 먼저 설명을 하자면 객체는 우리 주위에 있는 모든것들 컴퓨터, 모니터, 사무실, 정수기, 세포 하나 분자 하나까지도 모두 객체가 될 수 있다. 하지만 동일한 기종과 사양의 A라는 컴퓨터를 만들때 A가 제조 방법도 다르고 안에 들어가는 부품또한 다르게 만들지는 않고 모두 동일 하게 만들것이다. 그때 사용하는 부품들이라 던지 그 부품을 찍어내는 기계들은 모두 동일 할 것이다. 구매자 철수가 A라는 컴퓨터를 주문시 A라는 컴퓨터는 동일 한 형식에 따라 찍어내고 조립하여 철수에게 배달 될 것이다. 이러한 A컴퓨터의 생산 과정을 매번 다르게 할 필요가 없다는 것이다. 다만 철수가 컴퓨터 주문시 옵션에 그래픽카드를 변경하거나 RAM을 추가하거나 케이스를 변경하면 결과물은 달라질 수 있다. 그래서 이러한 생성, 조립 과정을 하나의 객체로 묶어 결과물을 동일한 방식으로 도출해 내는 것을 객체라는 것으로 묶어 버린다고 생각하자.
자 그러면 이러한 개념을 갖고 객체 지향 프로그래밍을 개발자 시각에서 예를 들어보자
EX)
개발자 개린이가 상품관리 라는 화면에서 상품코드를 소문자로 입력시 대문자로 자동으로 변환해 저장하는 기능이 필요해졌다.
그래서 상품코드 화면에 소문자를 대문자로 변환해주는 함수를 작성했다.
그후...
개발자 개린이가 카테고리 관리 라는 화면을 개발하는데 카테고리 코드를 소문자로 입력시 대문자로 자동으로 변환해 저장하는 기능이 필요해졌다.
그래서 카테고리 관리라는 화면에 소문자를 대문자로 변환해주는 함수를 작성하였다.
그리고 개린이는 소문자를 대문자로 변환해주는 함수에 문제가 있다는 사실을 깨달았다. 그래서 결국 상품코드 화면과 카테고리 관리 화면의 소스에 코드를 수정해 주었다.
위의 예시에서 눈치 빠른 개린이들은 문제점이 있다는것을 알것이다.
문제점 1 - 소스코드가 너무 길어진다
문제점 2 - 상품 관리 화면과 카테고리 관리 화면에서 중복된 코드를 코딩하여 사용하고 있다.
문제점 3 - 함수에 문제가 생길 시 두 화면에 관련된 소스코드에 들어가 각각 수정해주어야 한다.
문제점 4 - 대소문자변경이 필요한 화면이 10개가 넘을 경우 수정하기가 너무 힘들다.
문제점 5 - 프로젝트를 하는 개린이 마다 대소문자 변경 방식이 달라질 수 있다.
위의 문제 5개를 해결 하기 위해서는 소문자를 대문자로 변환해 주는 대소문자변환 함수를 따로 만들고 상품 관리 화면과 카테고리 관리 화면에서는 대소문자 변환 함수에 문자열만 전달하고 리턴받는다. 리턴받은 결과값의 문자열을 사용 하기만 하면 된다. 그리고 다른 개린이들은 이러한 기능이 필요할때 그 함수에 내부 정보는 자세히 알 필요없이 대소문자변환 함수에 문자열만 보내서 리턴 받아 쓰기만 하면된다.
여기서 만든 대소문자변환 함수라는 것을 하나의 객체라고 묶을 수 있다. 그리고 우리는 그 객체를 가져다가 쓰기만 하면 되는것이다.
이렇게 OOP의 객체지향프로그래밍은 중복된 코드작성을 방지하고 오류사항을 줄이며 객체하나를 수정함으로 써 반복되는 수정 작업을 거치지 않을 수 있다. 하나의 클레스, 메소드에서 우리는 각각의 기능으로 쪼개진 객체들을 필요에 따라 가져다 쓰기만 하면 된는것이다.
이러한 개념을 잡고 OOP에 대하여 심도(캡슐화, 추상화, 다형성, 상속성)있게 공부하도록 하자
그리고 주의 할 점은 이러한 개념은 JAVA에서만 쓸게 아니라 javascript등의 다른 개발 언어 에서도 해당된다는 것을 명심 또 명심 하자
하나의 프로그램을 개발할때 이러한 함수는 공통 적으로 사용할 수 있게끔 하나의 함수(객체)로 분리하여 개발 하는게 좋겠다 라고 생각하는게 개린이가 진정한 개발자로 갈 수 있는 한발자국이 아닐까 싶다.
다음 포스트는 OOP(캡슐화, 추상화, 다형성, 상속성)에 대하여 같이 알아보도록 하자!
'JAVA' 카테고리의 다른 글
[SAP JCO] com.sap.conn.jco.JCoException: (102) 에러 (0) | 2024.02.29 |
---|---|
2-2 OOP의 특징 (추상화, 캡슐화, 상속, 다형성) (1) | 2021.08.25 |
1-2. API - REST API를 간단하게 구현해보자 (0) | 2021.08.23 |
1-1. API - API란? (0) | 2021.08.05 |
JAVA에서 프로시저(PROCEDURE) 결과값 받기 mabatis (0) | 2021.06.09 |