[JAVA] 객체지향 핵심 원리

logg·2021년 1월 1일
0
post-thumbnail

1. 객체지향 개요

1-1. 객체지향의 개념

  • 1960년대 말, '소프트웨어 위기론'의 등장
    • 모듈화 되어서 개발되는 하드웨어에 비해서 그 당시 소프웨어는 모듈화 되지 않은 상태로 개발됨.
    • 한번 작성된 코드는 재사용하기 어려움
    • 그래서 모듈화된 소프트웨어 개발에 대한 요구가 발생 -> 객체지향 패러다임
  • 객체지향 vs 절차지향
    • 절차지향
      • 실행되는 순서가 위에서부터 아래로 순차적으로 진행되는 형태를 가진 언어프로그램
      • 재사용 시 기존에 만들어진 코드를 복사하여 붙여넣기 하는 방법 사용

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

1-2. 객체, 클래스, 인스턴스

  • 객체 (ex.자동차)

    • 정적인 요소 = 변수(Variable)
      ex) 제조사, 브랜드명
    • 동적인 요소 = 메서드(Method)
      ex) 시동건다(), 출발한다()

  • 클래스 (ex. Class Car)

    • 현실 세계의 객체를 프로그램에서 이용할 수 있는 객체로 만들어 주는 것

    • 현실 세계의 객체를 컴퓨터 메모리에 생성할 수 있는 템플릿

  • 인스턴스 (ex. Yellow Car, Blue Car)

    • 컴퓨터 메모리에 존재하는 객체

  • 객체, 클래스, 인스턴스의 관계

    • 객체를 클래스라는 템플릿을 통해서 인스턴스라는 메모리상의 객체를 만든다.

2. 객체지향 언어의 주요 개념

2-1. 상속과 다형성

  • 상속

    • 정의 = 상속이란 부모 클래스가 가지고있는 모든것을(생성자 제외) 자식클래스가 물려받아 같이 공유하며 나아가 확장(extends)하는 개념이다. 부모 클래스를 상위 클래스(superclass)로 부르며 상속받는 자식 클래스를 하위클래스(subclass)라고 부른다.
      출처 = https://slowlywalk1993.tistory.com/entry/Java-%EC%83%81%EC%86%8DInheritance%EC%9D%B4%EB%9E%80

    • 왜 필요한가?

      • 클래스끼리 서로 공통된 내용이 대다수 일때 코드를 재작성하는 것이 아니라 상위 클래스한테서 상속을 받아 진행한다.

      • 상속은 코드를 간결하게 하여 코드의 재사용성을 높이는 객체지향의 핵심 개념!

    • 상속의 논리적 관계

      • 부모 클래스와 자식 클래스의 관계가 일반화, 특별화 관계에 있어야 함.

      • 논리적으로 판단되어야함

  • 다형성

    • 하나의 인터페이스를 이용해 서로 다른 구현을 제공함
      ex) 리모콘으로 다른 종류의 티비에 같은 방법으로 명령을 내리는 것

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

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

      • 메서드 오버라이딩 = 상속 관계에 있는 하위 클래스가 상위 클래스가 가지고 있는 메서드를 재정의하는 것

2-2. 추상화, 캡슐화, 정보 은닉, 메시지

  • 추상화

    • 구체적인 사실들을 일반화시켜 기술하는 것

    • 현실 세계에 존재하는 다양한 객체들의 공통된 특성을 모아 일반화해 놓는 것

  • 캡슐화

    • 변수와 메서드를 하나의 추상화된 클래스로 묶는 과정을 의미함

    • 변수와 메서드를 하나로 묶어 독립적으로 동작하지 않도록 함

  • 정보 은닉

    • 객체지향 언어에서는 캡슐화된 변수나 메서드를 선택적으로 공개하거나 숨길 수 있음
  • 메세지

    • 객체 간에 서로 통신하는 방법

    • 객체 간에 메세지를 주고받기 때문에 여러 객체는 동일한 프로세스를 가질 필요 없음

    • 서로 메세지를 주고받는 데 객체가 존재하는 위치는 제약이 되지 않음

    출처: SWEA사이트

profile
logg

0개의 댓글