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

geonmyung·2020년 7월 21일
2
post-thumbnail

1. 객체 지향 프로그래밍은 뭐야?

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법.

다시 적어보자면, 상태와 행위를 가진 객체들을 레고 블럭처럼 조립해서 하나의 프로그램을 만드는 것을 객체 지향 프로그래밍이라고 할 수 있다.

2. 객체 지향 프로그래밍의 장, 단점은?

장점

  • 코드 재사용이 용이
    => 기존에 만들어진 클래스를 재사용할 수 있고 상속을 통해 확장 가능
  • 유지 보수가 편리
    => 수정해야 할 부분이 클래스 내부에 있으므로 해당 부분만 수정하면 됨.
  • 대형 프로젝트에 적합
    => 클래스 단위로 모듈화시켜서 개발 -> 업무 분담의 편리성 향상

단점

  • 처리속도가 상대적으로 느림
  • 객체의 수 증가 -> 용량이 커질 수 있음
  • 설계시 많은 시간과 노력이 필요
    => 좋은 객체를 만드는 것을 다른 말로 설계를 잘하는 법이라고 할 수 있는데, 좋은 설계는 현실을 잘 반영해야 한다.

3. 객체 지향 키워드 5가지

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

클래스

추상화를 거쳐 집단에 속하는 속성과 행위를 변수와 메소드로 정의한 것.
다시 풀어서 적어보자면,

  • 어떠한 객체의 상태를 나타내는 변수와 행동을 나타내는 메소드의 집합
  • 객체를 정의하는 틀, 설계도

라고 볼 수 있다.

인스턴스(객체)

클래스에서 정의한 것을 토대로 실제 메모리상에 할당 된 것.
클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화 라고 한다.


출처입니다!

클래스를 통해 생성된 인스턴스들은 서로 다른 각자의 이름을 가지고 있고 속성과 기능을 독립적으로 갖는다.

2) 추상화 (자료의 추상화)

불필요한 정보는 놔두고, 중요한 정보만을 표시함으로써 공통의 속성이나 기능을 묶어 이름을 붙이는 것.
물고기, 사자, 토끼, 뱀이라는 이름을 가진 객체가 각각 있고 이 객체들을 하나로 묶으려고 할 때, 동물 또는 생물이라는 추상적인 객체로 크게 정의하여 묶는 것을 추상화라고 한다.

3) 캡슐화

데이터 구조와 데이터를 다루는 방법들을 결합 시켜 묶는 것.
=> 변수와 함수를 하나로 묶는 것을 뜻한다.
캡슐화를 통해 관련된 기능과 특성을 한 곳에 모으고 분류하기 때문에 재활용이 원활해지는 효과가 있다.

4) 상속

상위 개념의 특징을 하위 개념이 물려받은 것
부모 클래스의 속성과 기능을 그대로 물려받아 사용할 수 있고, 기능의 일부분을 변경해야 할 경우 상속받은 자식 클래스에서 해당 기능만 다시 수정하여 사용할 수 있다.

5) 다형성

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

  • 오버라이딩 : 부모클래스의 메소드와 같은 이름, 매개변수를 재정의 하는 것.
  • 오버로딩 : 같은 이름의 함수를 여러개 정의하고 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있도록 하는 것.

+) getter, setter 사용 이유

getter, setter을 사용하면 메소드를 통해 접근하기 때문에, 올바르지 않은 입력에 대해 사전에 처리할 수 있도록 제한하거나 조절할 수 있기 때문이다.

※ 느낀점

당연히 많이 들어봤기에 자신있게 대답할 수 있을거라고 생각했다.
하지만 막상 면접에서 이런 질문을 들었을 때 제대로 대답할 수 없었다...ㅠㅠ
만약 객체 지향에 대해 설명했더라도 위에 2번, 3번에 대한 질문에 대한 올바른 대답은 못 했을 것 같다.
기본기가 가장 중요하다는 사실을 블로그 글을 쓰면서 매번 느끼고 있다.

참고 자료

아래 사이트에서 공부하고 이를 이해한 내용을 바탕으로 작성했습니다!
혹시 내용이 부족하다면 밑에 자세히 설명된 자료를 읽어주세요
https://jeong-pro.tistory.com/95
https://opentutorials.org/course/743/6553
https://m.blog.naver.com/PostView.nhn?blogId=29java&logNo=70187502359&proxyReferer=https:%2F%2Fwww.google.com%2F
https://javacpro.tistory.com/29
http://tcpschool.com/java/java_class_intro
https://88240.tistory.com/228

profile
옹골찬 개발자가 되기 위한 험난한 일대기

0개의 댓글