컬쥐네 다락방

객체 지향 프로그래밍(OOP)이란? 본문

웹 개발/Java,Spring

객체 지향 프로그래밍(OOP)이란?

코딩하는 갱얼쥐 2021. 6. 3. 17:27

객체 지향 프로그래밍이란? 

컴퓨터 프로그래밍 패러다임중 하나로, 프로그래밍에 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적힌 상호작용을 통해 로직을 구성하는 프로그래밍이다. 상태와 행위로 이루어진 객체로 레고처럼 조립해서 프로그램을 만드는 것.

 

간단한 OOP 정리 : 

객체지향이란 실세계의 사물을 추상화하여 멤버 변수와 메소드를 정의하는데서 출발한다. 

캡슐화를 통해 이와같은 멤버변수와 메소드의 이용가능 범위를 적정하게 제한 할 수 있고 상속을 이용하여 부모 클래스의 기능을 자식클래스에서 물려받거나 재정의를 통해 다른 기능을 구현하는 다형성까지 포함됩니다.

객체지향의 장점으로는 코드의 재사용성이 있습니다.  

따라서 개발 및 유지보수에 효율적이고 캡슐화를 통한 데이터의 올바른 값 유지, 다형성을 이용한 메소드의 활용 등이 있습니다.

 

객체 지향 프로그래밍의 장,단점

*장점 : 

-코드 재사용이 용이하다.

남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서 사용할 수 있다.

-유지보수가 쉽다.

절차 지향 프로그래밍에서는 코드를 수정할 때 일일이 찾아 수정해야하는 방면 객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 맴버 변수 혹은 매서드로 있기에 해당 부분만 수정하면 된다.

-대형 프로젝트에 적합하다.

클래스 단위로 모듈화시켜서 개발하기에 업무 분담하기 쉽다.

 

*단점:

-처리 속도가 상대적으로 느리다.

-객체가 많으면 용량이 커질 수 있다.

-설계시 많은 시간과 노력이 필요하다.

 

객체 지향 프로그래밍 키워드 5가지

1. 클래스 + 인스턴스(객체) 

클래스 : 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성과 행위를 변수와 메서드로 정의한 것

인스턴스 : 클래스에서 정의한 것을 토대로 실제 메모리상에 할당된 것. 실제 프로그램에서 사용되는 데이터

 

2. 추상화 

불필요한 정보는 숨기고 중요한 정보만 표현해서 공통의 속성이나 기능을 묶어 이름을 붙이는 것.

 

3. 캡슐화

캡슐화의 목적: 코드를 재수정없이 재활용하는 것.

프로그램 코드에서 변수와 함수를 재활용하기에는 분산되어 있기 때문에 재활용이 어려웠으나 캡슐화를 통해 관련된 기능과 특성을 한 곳에 모으고 분류하기 때문에 재활용이 원활해졌다.

객체 지향 프로그래밍에서 기능과 특성의 모음을 '클래스'라는 '캡슐'에 분류해서 넣는 것이 바로 캡슐화.

 

4. 상속이란?

절차 지향 프로그래밍에서도 라이브러리를 통해서 남이 짜놓은 코드를 가져와 사용할 수 있다.

하지만 의도에 따라 수정되면 전혀 다른 라이브러리가 되어 버전에 따라 동작하지 않을 수 있고, 불필요한 코드의 수정작업이 필요.

상속은 부모클래스의 속성과 기능을 그대로 이어받아 사용할 수 있고 상속받은 클래스의 일부분을 변경하고 싶다면 해당 기능만 다시 수정(정의)하여 사용할 수 있게 해준다.

*다중 상속은 불가! 

 

5. 다형성이란?

하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있다.

오버라이딩(Overriding): 부모 클래스의 메서드와 같은 이름, 같은 매개변수를 재정의 하는 것.

오버 로딩(Overloading): 같은 이름의 함수를 여러개 정의하고, 매개 변수의 타입과 개수를 다르게 하여 매개 변수에 따라 다르게 호출되도록 하는 것.

 

Getter, Setter를 사용하는 이유는?

맴버 변수에 직접 접근하지 못하게 Private으로 접근 지정자를 설정하고 Public으로 getter, setter를 만드는 이유는 getter와 setter를 사용하면 메서드를 통해 접근하기 때문에, 메서드 안에서 매개변수같이 어떤 올바르지 않은 입력에 대해 사전에 처리할 수 있게 제한하거나 조절하기 위함.

ex) setter에 유효 범위를 넘은 점수가 들어오면 먼저 처리하고 set하거나 예외 처리를 한다.

 

절차 지향 방식과의 차이점? 

절차 지향 프로그래밍은 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 기법.

컴퓨터의 작업 처리 방식과 유사해서 객체 지향 언어보다 처리가 빨리 되어 시간적으로 유리하다.

SW와 HW의 개발 속도 차이가 크지 않던 과거에는 좋았지만 SW 개발 속도를 HW가 따라오지 못하자 객체 지향 언어가 등장했다. 기능별로 묶어서 모듈화 하기에 중복 연산을 막아 하드웨어의 처리량을 확 낮출 수 있었기 때문.

 

절차 지향 방식의 장단점

*장점 : 

-컴퓨터의 처리 구조와 유사해 실행 속도가 빠르다

 

*단점:

-유지 보수가 어렵다

-실행 순서가 정해져 있어서 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다.

-디버깅이 어렵다.

'웹 개발 > Java,Spring' 카테고리의 다른 글

RESTful API 란?  (0) 2021.06.29
Spring MVC 란?  (0) 2021.06.14
컴파일 에러 VS 런타임 에러  (0) 2021.06.04
Java - List, Set, Map 의 차이점  (0) 2021.06.03
java - 제네릭 / 컬렉션  (0) 2021.06.02
Comments