객체 지향 기초

DoooongDong·2022년 11월 19일
0

한빛미디어의 <쉽게 배우는 자바 프로그래밍>을 요약 정리했습니다.

객체

먼저 객체는 현실 세계에서 구체적이거나 추상적인 사물을 의미합니다.

  • 구체적인 사물: 인간, 오토바이
  • 추상적인 사물: 축구, 강의

이러한 모든 것이 객체가 될 수 있습니다.

소프트웨어 객체도 현실 세계의 객체와 개념이 비슷합니다.

현실 세계 객체소프트웨어 객체
상태필드
동작메서드

필드는 객체 내부에 선언된 변수를 의미하고 메서드는 객체 내부에 정의된 동작입니다.

따라서 소프트웨어 객체는 현실 세계의 객체를 필드와 메서드로 모델링한 것입니다.

객체는 개별적으로 사용하거나 다른 객체와 관계를 맺으면서 동작할 수 있습니다.

위 사진처럼 사람이 오토바이에 타고 있을 때 사람이 오토바이를 움직이면 오토바이는 사람의 위치를 이동시키고 있는 것처럼 말이죠.

대부분의 소프트웨어는 다수의 객체로 구성되며, 상호작용해서 문제를 해결합니다.

절차 지향과 객체지향

절차 지향 프로그래밍

  • 순서에 맞추어 단계적으로 실행할 명령어들을 나열
  • 명령어의 순서와 흐름에 중점을 둠
  • 규모가 작을 때는 프로그래밍하기 쉽다
  • 하지만 추후 변경하거나 확장하기 어렵다

객체 지향 프로그래밍(OOP, Object-Oriented Programming)

  • 현실 세계의 작업은 절차나 과정보다 이것과 관련된 많은 물체의 상호작용으로 표현하는 것이 더 이해하기 쉽다
  • 절차 지향 프로그래밍의 복잡한 프로그래밍 처리 문제점을 극복
  • 현실 세계를 객체 단위로 프로그래밍 한다

객체와 클래스

제품을 만들기 위해서는 설계도가 필요한데요.

붕어빵의 재료로는 밀가루, 앙금 등이 필요합니다. 또한 붕어빵 형틀(Template)이 꼭 있어야 하죠.

이런 틀이나 설계도가 있으면 동일한 제품을 여러 개 만들 수 있습니다.

객체 지향 프로그래밍에서는 클래스(Class)가 이 동일한 객체를 생산하는 틀에 해당됩니다.

클래스라는 틀로 만든 객체가 해당 클래스의 인스턴스(Instance)입니다.

붕어빵은 붕어빵 틀의 인스턴스가 되는 것이죠. (붕어빵 == 인스턴스)

클래스에서 객체를 생성하는 과정을 인스턴스화라고 합니다.

객체 지향 프로그래밍 주요 특징

  1. 캡슐화(Encapsulation)

캡슐화는 관련된 필드와 메서드를 하나의 캡슐처럼 포장해 세부 내용을 외부에서 알 수 없도록 감추는 것입니다. 그래서 캡슐화를 정보은닉(Information Hiding)이라고도 합니다.

캡슐화의 주목적은 내부 데이터를 숨겨서 외부 영향에서 벗어나는 것입니다.
즉, 외부에서 객체 내부 구조를 모르기 때문에 객체가 노출하는 필드와 메서드로만 객체에
제한적으로 접근할 수 있게 됩니다.
또한 캡슐화를 하게 되면 내부의 상세 내역을 숨길 수 있기 때문에 캡슐화된 부품을 동일한 기능의 다른 부품으로 바꿔도 외부에 영향을 미치지 않는 효과도 있습니다.

예를 들어 조립 컴퓨터가 고장 나면 기능이 동일한 다른 부품으로 교환해도 조립 컴퓨터는 정상적으로 동작합니다. 마찬가지로 클래스 내부에 캡슐화된 코드가 동일한 기능이라면 다른 코드로 대체할 수 있는 것입니다.

  1. 상속(Inheritance)

객체 지향 프로그래밍에서는 상위 객체를 상속받은 하위 객체가 상위 객체의 메서드와 필드를 사용할 수 있습니다. 이를 상속이라고 하는데, 상속은 개발된 객체를 재사용하는 방법 중 하나입니다.

상위 객체 클래스 - 부모 클래스, 슈퍼 클래스, 기본 클래스 라고 불립니다.
하위 객체 클래스 - 자식 클래스, 서브 클래스, 파생 클래스, 확장 클래스 라고 불립니다.

자식 클래스는 부모 클래스의 메서드와 필드를 사용할 수 있으며, 자신에게 맞게 수정하거나 새로 추가할 수도 있습니다.

  1. 다형성(Polymorphism)

다형성은 대입되는 객체에 따라서 메서드를 다르게 동작하도록 구현하는 기술입니다. 이는 실행 도중 동일한 이름의 다양한 구현체 중에서 메서드를 선택할 수 있다는 것을 의미합니다.

부모 클래스 - Animal 에서는 move()함수가 move로 동작하는데 자식 클래스 - 독수리, 호랑이, 금붕어 들은 각각 move() 함수가 fly, run, swim으로 동물마다 다르게 반응하도록 할 수 있습니다.

이렇듯 동일한 명령을 내려도 객체의 종류에 따라 다른 결과가 나타나도록 하는 프로그래밍 기술이 다형성입니다.

profile
꺾이지 말자 :)

0개의 댓글