객체지향 프로그래밍

bird.j·2021년 3월 28일
0

java

목록 보기
1/10

💡 객체 지향 프로그래밍(OOP)


독립된 단위인 객체를 기준으로 코드를 나누고 그 객체들 간의 유기적인 상호작용을 목표로 구현하는 프로그래밍 기법이다.
이를 쉽게 말하면, 부품 객체를 만들고 이들을 하나씩 조립해서 완성된 프로그램을 만드는 기법이다.

🎈 장점

  • 코드 재사용성이 좋아진다.
    남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서 사용할 수 있다.

  • 유지보수가 쉬워진다.
    절차 지향 프로그래밍의 경우 코드 수정 시 일일이 찾아서 수정해야 하지만 객체 지향 프로그래밍에서는 클래스로 구분되어 있기 때문에 내부의 멤버변수나 메서드를 찾아 수정하기가 쉽다.

  • 대형 프로젝트에 적합하다.
    클래스 단위로 모듈화시키기 때문에 여러명이 개발할 경우 업무 분담이 쉬워진다.

🎈 단점

  • 처리 속도가 상대적으로 느리다.
  • 객체가 많으면 용량이 커질 수 있다.
  • 설계 시 많은 시간과 노력이 필요하다.



💡 객체 지향 프로그래밍의 키워드


1) 객체와 클래스

🎈 객체

세상에 존재하는 모든 것, 프로그램 단위
ex) 사람, 자전거, tv - 사칙연산 프로그램

🎈 클래스

객체를 생성하기 위한 틀을 말하며 객체는 클래스로부터 new를 통해 생성된다.
Memo myMemo = new Memo();
이 때 클래스로부터 생성된 객체를 인스턴스라고 부른다.

그렇다면 객체와 인스턴스의 차이점은 무엇일까?
인스턴스라는 말은 특정 객체가 어떤 클래스의 객체인지를 관계위주로 설명할 때 사용된다. Animal클래스에 의해 cat이라는 객체가 생성되었을 때, 1. cat은 Animal의 인스턴스 2. cat은 객체 이렇게 말할 수 있다.

클래스는 멤버 변수, 메서드, 생성자로 구성된다.
클래스 이름의 첫 글자는 일반적으로 대문자로 짓는다.

생성자는 클래스에서 객체를 생성할 때 가장 먼저 호출되며 클래스와 이름이 같다.


2) 추상화

= 공통점 모델링
가장 상위 개념. 가장 특징적인 속성을 파악해가기.
하위 개념들에게 공통적으로 적용할 수 있는 속성.

구체적이지 않은 필요성에 의한 공통적인 특성만 가지고 구성하는 것. 특징만 나열하고 이를 통해 구체화한 객체를 생성한다.

3) 캡슐화

= 정보 은닉.
내부 동작이 어떻게 돌아가는지 모르더라도 사용법만 알면 쓸 수 있도록 클래스 내부 감추기.

관련된 기능과 특성을 한 곳에 모으고 분류하여 재활용을 쉽게 한다. 기능과 특성의 모음을 클래스라는 캡슐에 분류해서 넣는다. 외부에서 객체의 내부데이터로 직접 접근하지 못하게 통제하여 정보를 은닉한다. 은닉된 정보로의 접근은 접근지정자를 통해서만 조작할 수 있다.

접근 지정자

  • private : 본인 클래스 내부의 메서드만 접근 가능
  • protected : 본인 클래스, 상속받은 자식 클래스에서 접근 가능
  • public : 모든 접근 허용

4) 상속

= 재사용, 확장
부모클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게 하고 상속받은 자식클래스에서 일부분을 수정하여 사용할 수 있다. extends를 통해 클래스 상속을 한다.

상속을 통해 기존의 검증된 class를 이용해서 빠르고 쉽게 새로운 class를 만들 수 있다. 부모님의 식당의 비법을 계승하여 식당을 차리게 되는 것으로 예를 들 수 있다. 여기서 더 맛있게 업그레이드 하는 것->오버라이딩

자식 클래스는 부모 클래스의 private접근자의 속성과 메서드를 제외한 모든 자원을 사용할 수 있다.


5) 다형성

= 사용 편의
다양한 형태를 가지고 있음. 변수명이나 함수명이 상황에 따라 다르게 해석될 수 있음.
메소드는 같지만 내부 구현이 다르기 때문에 다양한 형태의 결과 나올 수 있음(ex.출력되는 값)
-> 추상 클래스, 인터페이스, 오버로딩

즉 하나의 객체가 여러 가지 형태를 가질 수 있는 것을 의미한다. 오버라이딩, 오버로딩이 가능하다.

🎈 오버로딩

메서드 오버로딩, 생성자 오버로딩.
같은 이름의 함수를 여러개 정의하고 매개변수의 타입과 개수를 다르게.
-> 같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있고, 메소드의 이름을 절약할 수 있다.

🎈 오버라이딩

부모클래스를 상속받아 사용하며 자식 클래스에서 재정의가 가능하다. 재정의하는 것이므로 오버라이딩하고자 하는 메소드의 이름, 매개변수, 리턴 값이 모두 같아야한다.


reference
참고 | 자바 프로그래밍 입문 강좌 (renew ver.)
참고 | 객체 지향 프로그래밍이 뭔가요?
참고 | OOP란?

0개의 댓글