객체지향 - accidentlywoo/java GitHub Wiki

객체지향


학습 내용

  1. 객체지향 개요
  • 객체지향의 개념
  • 객체, 클래스, 인스턴스
  1. 객체지향 언어의 주요 개념
  • 상속과 다형성
  • 추상화, 갭슐화, 정보 은닉, 메시지

학습 목표

  1. 객체지향 언어의 특징을 이해하고, 클래스, 인스턴스의 개념을 설명할 수 있다.
  2. 객체지향 언어의 핵심 개념인 상속, 다형성, 추상화, 정보 은닉, 메시지에 대해 설명할 수 있다.

OOP(Object Oriented Programming)

하드웨에 : 시스템을 구성하는 각각의 기능들이 독립적인 모듈로 개발됨 소프트웨어 : 모듈화가 되지 않은 상태로 개발됨 : 한번 작성된 코드는 재사용하기 어려움

-> 모듈화된 소프트웨어 개발에 대한 요구 발생 -> 객체지향 패러다임

절차지향

실행되는 순서가 위에서부터 아래로 순차적으로 진행되는 형태를 가진 언어 프로그램 재사용 시 기존에 만들어진 코드를 복사하여 붙여넣기 하는 방법 사용

-> 항수가 만들어짐

  • 자주 사용되는 특정한 코드를 하나의 모듈(묶음)로 묶어 놓은 것
  • 프로그래머가 사용하고 싶을 때마다 호출하여 코드가 실행되게 함.
  • 데이터와 함수 간에 유기적인 관계성을 갖지 못함 ex) 유기적인 연결관계를 갖고 있는 데이터와 함수의 예 입금액 : 입금함수 -잔액 증가->잔액 출금액 : 출금 함수 -잔액 감수->

객체지향

객체 : 변수 , 메서드

  • 객체지향을 통해 보다 높은 유지보수성 유지가 가능해짐
  • 객체와 객체 간 자유로운 데이터 이동이 가능해짐

객체(Object)

현실 세계에 존재하는 유-무형의 모든것

객체 - 정적인 요소(변수 Variable), 동적인 요소(메서드 Method)

클래스(Class)

현싱 세계의 객체 -> 프로그램에서 이용할 수 있는 객체 클래스는 현실 세계의 객체를 컴퓨터 메모리에 생성할 수 있는 템플릿

인스턴스(Instance)

인스턴스는 컴퓨터 메모리에 존재하는 객체

  • 다양한 자동차 인스턴스를 메모리에 생성 가능함.

객체지향 언어의 주요 개념

상속(Inheritance)

속성과 메서드가 약간 다른 객체를 필요로 한다면? -> 기존 클래스를 이용해서 새로운 클래스를 작성함.(상속)

상속의 특징

ex) 공통 규정에 해당하는 내용이 중복되어 있을 경우

  • 공통 규정이 바뀔 경우, 세 벌의 규정집 모두를 수정해야 하는 문제 발생
  • 특정 직군에만 해당하는 규정이 무엇인지 파악하는 데 어려움 발생 -> 상속을 통해 문제 해결 -> 상속은 코드를 간결하게 하여 코드의 재사용성을 높이는 객체지향의 개념

자바는 상속을 통해 객체들 사이의 계층 구조를 이룰 수 있음 자동차 승용차 / 버스 ㅡㅡㅡㅡ관광버스 / 시내버스

일반화, 보편화 <----> 특수화, 개별화

상속의 논리적 관계

클래스들 사이에 공통된 속성이나 기능들이 있을 경우, 상속을 통해 재사용성을 높일 수 있음 -> 부모 클래스와 자식 클래스의 관계가 일반화, 특별화 관계(is a~')에 있어야 함

문법적으로 강제되는 것이 아니라 논리적으로 판단되어야 함.

프린터 도트 프린터 / 잉크젯프린터/ N사 카메라->부적절

카메라 C사 카메라

-> 상속의 관계가 논리적으로'is a ~'관계가 성립되지 않아 유지보수가 어려워짐

클래스의 상속은 하나의 하위 클래스가 하나의 상위 클래스를 갖도록 하는 단일 상속이 일반적이지만, 하나의 클래스가 두 개 이상의 상위 클래스를 갖도록 계층구조를 생성할 수 있다. 이를 다중 상속(Multiple Inheritance)이라 하는데, 자바는 단일 상속만을 지원하는 언어이므로 참고로만 알아두자.

다형성(Polymorphism)

one interface, multiple implementation ex) TV교체 시 이전에 사용하던 방법을 사용할 수 없고, 메뉴얼을 다시 확인해야 함 어떤 TV든 상관없이 동일한 방법으로 TV를 시청하기 위해서는?

다형성은 메서드 오버로딩(Overloading)과 메서드 오버라이딩(Overriding)을 통해 지원됨

  • 메서드 오버로딩(Overloading) 한 클래스 안에 같은 이름의 메서드를 여러 개 정의하면서, 그 인자의 개수나 유형을 다르게 해놓은 형태

  • 메서드 오버라이딩(Overriding) 상속 관계에 있는 하위 클래스가 상위 클래스가 가지고 있는 메서드를 재정의하는것 재정의된 메서드가 선언된 형태는 상위 클래스에서 선언된 것과 같음

추상화(abstraction)

구체적인 사실들을 일반화시켜 기술하는 것 현실 세계에 존재하는 다양한 객체들의 공통된 특성을 모아 일반화해 놓는 것 -> 클래스를 정의하는데 중요한 역할을 함.

ex) 비행기, 자동차, 열차, 배 -> 운송수단 : 운송수단의 동일한 특징인 화물이나 승객을 운반함

캡슐화(Encapsulation)

변수와 메서드를 하나의 추상화된 클래스로 묶는 과정을 의미함 -> 변수와 메서드를 하나로 묶어 독립적으로 동작하지 않도록 함 캡슐 속 객체는 데이터와 메서드를 포함하고 있어서, 따로 분리할 수 없음

-> 객체가 제공하는 메서드를 통해 객체를 이용하고 데이터가 실제로 어떻게 처리되는지 알 필요 없음

정보 은닉(Information Hiding)

객체지향 언어에서는 캡슐화된 변수나 메서드를 선택적으로 공개하거나 숨길 수 있음 숨겨야 하는 정보(private) / 공개하는 정보(public)

메세지(Message)

객체 간에 서로 통신하는 방법 객체 간에 메시지를 주고받기 때문에 여러 객체는 동일한 프로세스를 가질 필요 없음 서로 메시지를 주고받는 데 객체가 존재하는 위치는 제약이 되지 않음 ex) 홍길동의 자동차 객체:car / 홍길동:Hong 메시지를 전달할 대상 객체인 car 전달하고 싶은 메시지인 changeGear() 메시지를 통해 전달하고 싶은 부과 정보가 있다면 해당 정보인 lowerGear

⚠️ **GitHub.com Fallback** ⚠️