티스토리 뷰

반응형


#. OOP(Object Oriented Programming)

> 절차지향 (POP)

  - 실행되는 순서가 위에서부터 아래로 순차적으로 진행되는 형태를 가진 언어

  - 프로그램 재사용 시 기존에 만들어진 코드를 복사하여 붙여넣기 하는 방법 사용

    => 함수의 등장.

         ㄴ자주 사용되는 특정한 코드를 하나의 모듈(묶음)로 묶어 놓은 것

         ㄴ프로그래머가 사용하고 싶을 때마다 호출하여 코드가 실행되도록 함

         ㄴ데이터와 함수 간에 유기적인 관계성을 갖지 못함


> 객체지향 (OOP)

  - 모듈성을 높이기 위해 함수가 등장

  - 객체 등장 (함수보다 더 높은 모듈 관리를 위해 자신이 가진 고유의 데이터와 그 데이터를 처리할 수 있는 메서드를 가짐) 

  - 이러한 객체들이 모여 객체지향 프로그램 구조가  형성

  - 객체지향을 통해 보다 높은 유지보수성 유지가 가능

  - 모든 데이터를 객체로 취급하므로 객체와 객체 간 자유로운 데이터 이동 가능



#. 객체, 클래스, 인스턴스

> 객체 (Object)

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

  - 객체는 정적인 요소(변수)와 동적인 요소(메서드)를 가짐

     ex) 객체 - 자동차

         정적인 요소(변수) - 이름, 속도, 색깔, 제조사

         동적인 요소(메서드) - 시동켜기(), 가속하기(), 감속하기(), 시동끄기()


> 클래스 (Class)

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

1
2
3
4
5
6
7
8
9
10
class Car {
    String name;
    int speed;
    String color;
    String company;
 
    void startEngine(){}
    void accelerate(){}
    void decelerate(){}
    void stopEngine(){}
cs


> 인스턴스(Instance)

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

  - 다양한 Car 인스턴스를 메모리에 생성 가능

    ex) 자동차들의 평균 속도 조회, 최대 최소 속도의 자동체 객체 검색 


> Object -> Class -> Instance



#. 상속

> 상속 (Inheritance)

  - 속성과 메서드가 약간 다른 객체를 필요로 할 때, 기존의 클래스를 이용하여 새로운 클래스를 작성

  - 이미 존재하는 클래스를 바탕으로 필요한 변수와 메서드를 추가로 정의해준 것이 상속

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

  - 자바는 상속을 통해 객체들 사이의 계층 구조를 이룰 수 있음

  - 상위 클래스일 수록 일반화, 보편화 특징을 가지고,

    하위 객체일 수록 특수화, 개별화 특징

  - 상속 시 extends 라는 상속 관계 예약어를 사용

  - 클래스들 사이에 공통된 속성이나 기능들이 있을 경우, 상속을 통해 재사용성을 높일 수 있음

     단, 부모 클래스와 자식 클래스의 관계가 일반화, 특별화 관계('is a ~')에 있어야 함 -> 논리적인 판단이 필요


> 상속의 종류

  - 단일 상속 : 하나의 하위 클래스가 하나의 상위 클래스를 갖도록 하는 구조

  - 다중 상속 : 하나의 클래스가 두 개 이상의 상위 클래스를 갖도록 계층구조를 생성

  * 자바는 단일 상속만 지원



#. 다형성

> 다형성 (Polymorphism)

  - 하나의 인터페이스를 이용하여 서로 다른 구현을 제공

  - one interface, multiple implementation 으로 표현

    ex) 동일한 인터페이스가 제공된 하나의 리모컨으로 모든 TV를 작동할 수 있을 것임

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

    ㄴ메서드 오버로딩(Overloading)

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

    ㄴ메서드 오버라이딩(Overriding)

       : 상속 관계에 있는 하위 클래스가 상위 클래스가 가지고 있는 메서드를 재정의하는 것

         재정의된 메서드가 선언된 형태는 상위 클래스에서 선언된 것과 같은



#. 추상화

> 추상화 (Abstraction)

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

  - 현실 세계에 존재하는 다양한 객체들의 공통된 특성을 모아 일반화해 놓은 것 -> 클래스 정의에 중요한 역할

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

         이것은 "운송수단"이라는 클래스로 정의할 수 있음



#. 캡슐화

> 캡슐화 (Encapsulation)

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

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

  - 캡슐 속 객체는 데이터와 메서드를 포함하고 있어 따로 분리할 수 없음

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



#. 정보 은닉

> 정보 은닉 (Information Hiding)

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

  - 숨겨햐 하는 정보는 "Private", 공개하는 정보는 "Public" 으로 구분



#. 메시지

> 메시지 (Message)

  - 객체 간 서로 통신하는 방법

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

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

  - 객체지향을 사용하는 프로그램에서 생성되는 객체들은 서로 메시지를 주고 받으며 일을 수행

  - 메시지 전달 시, "대상 객체", "전달하고 싶은 메시지", "부과 정보" 가 필요

    ex) car.changeGear(lowerGear)



참고 : SW Expert Academy

반응형

'Web > JAVA' 카테고리의 다른 글

[JAVA] 멤버 변수 선언 (전역변수, 지역변수)  (0) 2019.07.25
[Java] 객체 생성  (0) 2019.07.25
[JAVA] StringTokenizer  (0) 2019.07.22
[JAVA] BufferedReader, InputStreamReader  (0) 2019.06.02
[JAVA] StringBuilder  (0) 2019.05.30
댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday