티스토리 뷰
#. 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 |