GitHub

https://github.com/Backcoder-June

BackCoder 기록 그리고 숙달

Back to the Java

OOP 객체를 지향하는 프로그래밍을 지향하자

Backcoder 2022. 6. 12. 09:30

객체를 지향한다. 

 

객체를 지향 안하면? 

 

수많은 중복 코드들

복잡해지는 로직들 

중요한 data들을 숨기기는 어려워질것이다.

 

이렇게 중복되어 사용되는 data 들. 

메소드 로직들. 

이러한 것들을 '클래스' 라는 공장을 통해 "객체"에 담는다.

최대한 객체로 만든다. 

 

그리고 필요할때마다, data와 기능이 담긴 이 "객체"를 꺼내서 쓴다. ( Object, Instance ) 

 

중복코드가 줄어들고 

스펠링 오류 문제가 줄어들고

코드의 재사용성도 훌륭해지고

수정할 일이 있을 땐, 객체로 한방에

data에는 접근권한을 줘서 숨기기도 가능해진다. 

 

객체를 지향할 수 밖에 없다. 

 

 

객체님의 훌륭한 기능 4가지도 짧게 찬양해보자. 

 

1. Encapsulation 캡슐화 

(1) 묶기

 

데이터 ( 이름, 재산, 월급 )                                          Method 자산계산기() { return 재산 + 월급 ;}

 

Method 함수에 필요한 연관 data 들을 같은 Class 에 캡슐로 묶는다. 

 

메소드는 Data와 한 객체에 캡슐로 묶여있는 덕분에, Data에 직접접근해서 사용이 가능해진다. ( this 활용 )

 

 

(2) 숨기기

private name, private id 

중요한 Data 는 숨기고 

 

메소드 함수를 이용해  

data를 공개할 수 있는 값으로 바꿔서 반환해 줄 수 있다.

 

 

2. Inheritance  상속 

객체 A 를 생성했다. A 는 (칼, 활, 창) 3가지 기능을 가진다. 

 

새로운 캐릭터를 만들고 싶다. 

 

객체 B 를 생성했다. B 는 (칼, 활, 창 + 총)  4가지 기능을 가진다. 

 

B 를 생성하는데, (칼, 활, 창) 이 중복 된다. 

 

A의 기능을 그대로 가져다 쓰고 싶다.

 

B 는 A 를 상속하기로 결정했다.

 

class B extends A {  super .칼활총 ; }

 

편리하게 완료. 상속의 힘이다. 

 

 

이렇게 Super class 의 모든 걸 그대로 가져다 쓰면서 추가로 뭔 가 더 만들고자 할때, 상속을 쓴다. 

 

또한, name 과 id 같은 기본적인 정보만을 가진 Entity class 는 여기저기 많이 불려가서 쓰인다.

 

이럴때 또 이 작은 entity class 를 상속해서 기본 정보를 편하게 가져다 쓴다. 

( 싱글톤이기 때문이기도 하다 - 접근권한 )  

 

3.  Abstraction  추상화 

세부 구현 정보 숨기기 

- interface 를 만들어서, 사용자가에겐 interface 만을 제공해 편하게 사용하게 한다.

뒷방엔 이 interface가 작동하게 만들어주는 실제 class 가 존재한다.

이 뒷방 class의 세세한 구현정보는 사용자가 알지 못한다.

즉, 복잡한 뒷방 class의 구현 정보를 ---------- 추상화 ----------> Interface   로 만들어서 사용자에게 제공하는 것이다.  

 

4. Polymorphism  다형성 

Class 는 객체를 만드는 공장이다.

calculator C1 = new calculator(111);

calculator C2 = new calculator(222); 

calculator C3 = new calculator(333);

같은 공장에서 나온 

C1, C2, C3 

 

하나의 Class 를 가지고, 다양한 모습의 C1, C2, C3 객체들을 만들어냈다.

 

이렇게,  하나가 여러 모습을 띄울 수 있는걸 다형성이라고 한다. 

 

또한, 

위에서 말한 추상화 를 해내기 위해선, class 가 interface 처럼 행세해야 한다. 

이를 가능하게 해주는게 다형성이다. 

 

interfaceRepository IR = new Memberrepository(); 

  <행세 Class>                         <원본 Class> 

 

 

overloading 오버로딩 또한 다형성의 대표적인 예이다. 

=>  하나의 메소드가(이름이같은) 파라미터 Type 에 따라 다른 모습을 취할 수 있다. 

 

 

기본적인 객체지향 특징들. 

객체를 지향하는 프로그래밍을 지향하자!