객체지향 프로그래밍
- 클래스를 생성하고 클래스로부터 객체를 만들어 객체 간의 상호작용을 이용하여 주어진 문제를 해결하는 프로그래밍 방식이다.
- 데이터인 필드와 절차인 메소드를 하나로 묶은 클래스 단위의 프로그램이다.
- 현실 세계를 객체 단위로 프로그래밍하여, 객치는 필드(데이터)와 메소드(코드)를 하나의 블럭으로 묶어서 표현한다.
- 원조는 시뮬라(simula)라는 프로그램 언어이고, 1960년에 조한 달과 크리스틴이 시뮬라 67을 발표했으며 이때 클래스라는 개념을 처음으로 도입했다.
* 절차 지향 프로그래밍은?
- 객체지향 언어 개념이 나오면서 기존 프로그래밍 방식을 표현하기 위해서 사용했다.
- 큰 틀은 일렬의 동작(모듈, 함수)를 순서에 맞게 단계적으로 실행했다.
- 데이터와 속성 보다는 명령어의 순서와 흐름에 포커싱을 둔다.
- 소프트웨어 규모가 커지면서 기능들이 복잡해지면서 추가 개발이나 유지보수의 어려움의 한계가 생겼다.
- 절차적 프로그래밍은 구조적 프로그래밍이다.
객체란?
현실 세계의 사물이나 개념을 시스템에서 이용하기 위해 현실 세계를 자연스럽게 표현하여 손쉽게 이용할 수 있도록 만든 소프트웨어 모델이다.
클래스 | 객체 |
· 객체를 만들기 위한 모형이자 툴(template) · 객체를 만들려면 반드시 객체의 다양한 특성을 표현할 수 있 는 모형인 클래스가 필요하다. |
· 클래스의 구체적인 하나의 실체(instance) · 객체와 클래스의 예로 집 설계도(클래스) - 실제 집(객체), 붕 어빵 틀(클래스) - 만들어진 붕어빵(객체) 등이 있다. |
객체 = 속성(Attributes, properties) + 행동(message, behaviors, method)
속성 : 객체를 구별시키는 특성(외모, 상태 등)
객체의 특성을 표현하는 정적인 성질로 프로그래밍에서 속성은 필드(field)라 한다.
행동 : 동작을 기술
객체 내부의 일을 처리하거나 객체들간의 서로 영향을 주고 받는 동적인 일을 처리하는 단위로, 행동은 메소드(method)라 한다.
* 자동차로 예를 들면?
자동차 클래스의 속성은 색상, 스타일, 제조회사, 변속 방법이 있고
메소드로는 시동을 걸다, 속도를 증가시키다, 기어를 변속하다, 정지하다 등이 있다.
객체 지향(OOP) 언어의 4가지 특징
추상화(Abstraction)
- 현실 세계의 사실에서 주어진 문제의 중요한 측면을 주목하여 설명하는 방식
- 실세계의 객체에서 불필요한 부분을 제거하여 필요한 부분만을 간결하고 이해하기 쉬운 클래스로 만드는 작업
- 속성과 행동으로 추상화를 실현
ⓐ 계좌 추상화
계좌
↓ 추상화
데이터 : 계좌번호, 비밀번호, 이름, 잔액]
기능 : 입금, 출금
↓ 클래스화(코드화)
public class Account {
private String bankNo;
private String password;
private String name;
private String balance;
public void deposit(int money) {
balance += money;
}
public void withDram(int money) {
balance += money;
}
}
ⓑ 자동차 추상화
추상화는 필요한 부분만 클래스로 만드는 작업이다.
현실 세계 | 추상화 ▶ |
객체지향 프로그램 세계 |
실 자동차 특징 | 자동차 클래스 | |
핸들 이름 소유주 마력 종류 ... |
이름 속도 |
|
운전한다 주유한다 속도를 올린다 속도를 내린다 음악을 켠다 |
속도를 올린다 속도를 내린다 |
자동차의 필요한 부분을 속성과 행동으로 구체화한 코드 : 메소드 형태로 만들기
public class 자동차 {
private int 최고속도;
public String 소유주명;
public int 현재속도;
public int 속도증가() {
현재속도 = 현재속도 + 10;
return 현재속도;
}
public int 속도증가(int 속도값) {
현재속도 = 현재속도 + 속도값;
return 현재속도;
}
public int 속도감소() {
현재속도 = 현재속도 - 10;
return 현재속도;
}
public int 속도감소(int 속도값) {
현재속도 = 현재속도 - 속도값;
return 현재속도;
}
public int 최고속도가져오기() {
return 최고속도;
}
public int 최고속도설정하기(최고속도값) {
최고속도 = 최고속도값;
}
}
캡슐화(Encapsulation)
실제 내부 구현 정보는 숨기는 원리로 객체와 객체간의 의사 소통을 위한 정보만을 노출하는 것을 캡슐화라 한다.
추상화 과정에서 클래스를 정의할 때 객체의 자료와 행위를 클래스 단위 하나로 묶고, 실제 내부 구현 내용을 외부에 감추는 것이다.
정보은닉(information hiding)이 발생
- 캡슐화 과정에서 클래스 내부 구현을 외부에 숨김
- 내부에서 일어나는 일은 관심이 없음
클래스의 단위의 내부 기능 중 일부는 외부에 공개되어 다른 객체와 메세지 전달과 수신을 하며 외부와의 통로 역할을 수행한다.
자판기가 있다면?
돈 넣고 제품 선택 ↔ 커피를 줌
ⓐ 제품 선택 = 함수(메서드)
ⓑ 돈넣고 = 함수 호출 시 전달 파라미터
ⓒ 커피를 줌 = 리턴값
이렇게 수행이 되지만, 자판기 내부에서 어떤일이 벌어지는지 관심이 없고 모른다.
상속(Inheritance)
- '물려받는다'라는 특징이 있다.
- 객체지향의 가장 핵심이 되는 개념이다.
- 프로그램을 쉽게 확장할 수 있도록 해주는 강력한 수단이다.
- 상위 클래스와 하위 클래스 간의 관계는 계층도로 나타낼 수 있다.
- 공통의 특성을 하위 클래스마다 반복적으로 기술하지 않고 한번만 기술하기 때문에 중복을 줄여 재사용성의 효과가 상속의 장점이다.
다형성(Polymorphism)
원래 생물학적 용어로 여러(poly) 형태(morphy)를 의미한다. 외부에 보이는 모습은 한가지 형태이지만 실질적으로 쓰이는 기능은 여러 가지 역할을 수행한다는 의미이다. 다형성의 예로 오버로딩(overloading)과 오버라이딩(overriding)이 있다.
ⓐ이동한다라는 의미가 대상에 따라 달라짐
마린 : 걸어서 이동함
레이스 : 비행으로 이동함
탱크 : 바퀴로 이동함
ⓑ리모콘의 기능이 제품마다 달라짐
TV : TV를 켜다
셋탑박스 : 셋탑박스를 켜다
'자바 JAVA > 자바 객체지향' 카테고리의 다른 글
자바 클래스와 객체의 생성 (0) | 2023.05.08 |
---|---|
자바 객체지향 : static과 final 배열 (0) | 2023.05.04 |
자바 객체지향 : 생성자 (0) | 2023.05.04 |
댓글