OOP란?

dev_shim·2022년 10월 14일
0

JAVA

목록 보기
3/4
post-thumbnail

자바 프로그래밍하면 객체지향 프로그래밍 OOP(Object Oriented Programming)이라해도 무방하다.

객체지향 프로그래밍의 특성은 크케 캡술화,추상화,다형성,상속성 정도는 명확하게 알고 있어야한다.

OOP하면 자동으로 4가지가 떠올라야한다.

1)캡슐화

캡슐화란 하나의 객체에 대해 그 객체가 특정한 목적을 위해 필요한 변수나 메소드를 하나로 묶는 것을 의미한다.

따라서 클래스를 우리가 만들 때 훗날 이클래스에서 만들어진 객체가 특정한 목적을 가지고 사용해야할 변수와 그 변수를 가지고 특정한 액션 즉 메서드 또는 함수를 관령성 있게 클래스에 구성해야한다.

예를 들면, 은행이라는 클래스는 잔고라는 변수가 있고 그 잔고를 조회하거나, 잔고를 수정할 수 있는 메서드등이 있다고 치는 것이다.

근데 캡슐화를 하는 중요한 목적은 바로 은닉화이다. 잔고라는 변수가 만약 public 으로 선언되어있다고 치면 200만원인 나의 잔고가

누군가의 접근에 의해 0 원이 될수도 있는것이다. 따라서 잔고라는 변수를 바로 접근할 수 없도록 private로 선언하고 데이터를 보호해야한다.

이렇게 보호된 변수는 getter나 setter등의 메서드를 통해 간접적으로 접근이 가능하도록 하는것이 바로 캡슐화의 중요한 목적이다.

2) 추상화

내가 이해한바로는 실세계 즉 세상에 있는 것을 본따 클래스를 만들고 그 클래스의 상태와 행동을 부여한 객체를 만든다.

그러나 누가 세상에 모든 것을 다 클래스에 담고 객체로 만들수 있을까? 그것은 불가능하다. 따라서

추상적으로 생각해 일단 큰틀의 클래스를 구현하고 거기에 최소 이러한 공통적인 요소나 필수적인 요소는 들어 갔으면 하는 바램에서 만든 것이 추상 클래스이다.

이 과정에서 공통적인 요소나 특징을 추출하는 과정이 추상화 인것 같다.

예를 들자면, 벤츠, 아우디, 소나타, 티코, 밴틀리 등등 우리가 생각하는 여러종류의 자동차가 있다. 이것을 다 클래스화하고 변수와 메서드 등을 개별적으로 만드는것은 무모한짓이다. (거두절미 하고 말하면 확장성때문에 추상화할 필요가 있다.)

따라서 방금 나열한 자동차들의 공통적인 요소나 특징을 추출하는 과정인 추상화를 거쳐 요소를 끄집어 내면, 바퀴,배기통,핸들,차문,유리창,등 필수적인 부품이 있고 바퀴는 굴러가야하며, 핸든을 좌우로 돌아가야하고

차문은 열려야한다는 공통적인 행동 즉 어떤 차든 필수적으로 필요한 메서드가 추출된다.

이러한 과정이 추상화하는 과정이다.

3) 다형성

다형성은 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해준다. 이를 통해 코드의 재사용, 코드 길이가 감소되어 유지보수가 용이하도록 도와주는 개념이다.

쉽게 같은 동작이지만 다른 결과물이 나왔을때 이를 다형성이라고 생각하면 된다.

예를 들어 사람은 누구나 말하다 라는 기능을 가지고있지만, 어떤 사람이냐에 따라 누구는 영어를, 중국어를, 한국어로 국적이나 사람 스타일에 따라 사용되는 것과 비슷하다고 비유해서 생각하면 된다.

크케 자바 프로그래밍 객체지향에서 다형성의 개념을 녹여내는 방법은 두가지 인데, 바로 오버라이딩(Overriding)과 오버로딩(Overloading)이다.

간단하게 설명하면,

오버라이딩은 부모클래스에서 상속받은 서브클래스 즉 자식 클래스에서 부모클래스, 즉 상위클래스에서 만들어진 메서드를 자신의 입맛대로 다 시 재장초해서 사용하는 것을 말한다.

오버로딩은 하나의 클래스 안에서 같은 이름의 메서드를 사용하지만 각 메서드 마다 다른 용도로 사용되며 그결과물도 다르게 구현할 수 있게 만드는 개념인데 오버로딩이 가능하려면 메서드끼리 이름은 같지만 매개변수의 갯구나 데이터 타입이 다르면 오버로딩이 적용되어 메서드 이름은 같아도 문법 에러가 나지않는다.

다시 정리하면 같은 행위를 하지만 용도와 목적에 부합하여 다양한 기능수행과 처리, 결과를 낳을 수 있는 것이다.

4) 상속성

상속은 객체지향의 꽃이라고 할 수 있다. 상속이란 기존 상위클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와주는 개념이다.

기존 클래스에 기능을 가져와 재사용할 수 있으면서도 동시에 새롭게 만든 클래스에 새로운 기능을 추가할 수 있게 만들어 준다.

자바에선 상속은 단일상속밖에 지원이 안되며 C++에선 다중상속이 지원된다. 이때문에 말이 많아 원래 자바쪽에서는 다중상속이 객체지향적인 관점에서 크게 유효하지 않다고 생각하지만, 다중상속이 필요할 순 있다고 인정하여 대비책으로 인터페이스를 다중상속(구현) 할 수 있게해서 임시적인 다중 상속에 대한 활로는 뚫어줬다. 그렇지만 인터페이스의 존재이유가 다중상속을 지원하기 위함이다 라고 생각하면 안된다.

profile
개발 연습장

0개의 댓글