객체 / OPP (Object-Oriented Programming)
객체지향 Object-Oriented Programming
객체들이 메세지(message)를 통하여 통신함으로써 원하는 결과를 얻는다.
각 객체는 고유의 데이터와 데이터를 처리할 수 있는 메소드(method)로 구성
vs
절차지향 Procedural Programming
구조적 프로그래밍
데이터 구조와 그 데이터를 변화시는 알고리즘으로구성
객체지향 Object-Oriented Programming
객체 지향 프로그래밍
- (Object-Oriented Programming, OOP)
- 부품 객체를 먼저 만들고 이것들을 하나씩 조립해 완성된 프로그램을 만드는 비법
객체란? What's an Object?
- 프로그래밍에서 객체란 상태와 행위의 집합체다. (속성(field, data)과 메소드(function,behavior))
- 물리적으로 존재하는 것 (자동차, 책, 사람)
- 추상적인 것(회사, 날짜) 중에서 자신의 속성과 동작을 가지는 모든 것
- 객체는 field(속성)과 method(동작)로 구성된 자바 객체로 모델링 가능
객체간의 관계
- 객체지향 프로그램에서는 객체는 다른 객체와 관계를 맺음
- 관계의 종류
- 집합 관계 : 완성품과 부품의 관계
- 사용 관계 : 객체가 다른 객체를 사용하는 관계
- 상속 관계 : 종류 객체와 구체적인 사물 객체 관계
클래스 (Class)
클래스 (Class)란?
서로 공통되는 구조를 가지고 있는 객체를 모아 이 객체들이 가지고 있는 데이터 영영ㄱ의 구조와 각각의 객체가 수행할 수 있는 메소드들을 정희한 객체를 의미한다. 한마디로 일반화된 속성과 메소드로 객체를 기술한 것을 클래스라고 한다.
- 객체는 항상 클래스로부터 생성된다. 즉 클래스는 객체를 생성하는 형판(template)
- 클래스는ㄴ 두개의 구성요소(member)인 자료구조(필드)와 연산(메소드)를 가진다
- 클래스로부터 생성된 객체를 instance라 한다
객체 = instance
- 정보처리의 주체는 클래스가 아니라 객체이다
- 객체지향 프로그래밍의 시작은 클래스의 생성이다
클래스와 객체의 정의와 용도
- 클래스의 정의 : 클래스란 객체를 정의해 놓은 것이다
- 클래스의 용도 : 클래스는 객체를 생성하는데 사용된다
- 객체의 정의 : 실제로 존재하는 것, 사물 또는 개념
- 객체의 용도 : 객체의 속성과 기능에 따라 다름
객체와 인스턴스 (Object and Instance)
Object != Instance
- 객체는 인스턴스를 포함하는 일반적인 의미
책상은 인스턴스다 | 책상은 책상 클래스의 객체다 |
책상은 개체다 | 책상은 책상 클래스의 인스턴스다 |
인스턴스화 (instantiate)
- 클래스로부터 인스턴스를 생성하는 것
클래스 >>> (인스턴스화) >>> 인스턴스(객체) |
객체의 구성요소 - 속성과 기능
객체는 속성과 기능으로 이루어져 있다.
- 객체는 속성과 기능의 집합이며 속성과 기능을 객체의 멤버(구성요소)라고 한다
속성은 변수로, 기능은 메서드로 정의한다.
- 클래스를 정의할 때 객체의 속성은 변수로, 기능은 메서드로 정의한다.
속성 - 크기 / 길이 / 높이 / 색상 / 볼륨 / 채널 등
기능 - 켜기 / 끄기 / 볼륨 업 / 볼륨 다운 / 채널 바꾸기 등
Example of Class
Class Triangle { //속성들(필드들)
Point A;
Point B;
Point C;
Color color;
Image pattern;
//메소드들
void draw(){
//실제 그리는 부분
}
void move(){
//각 점 위치를 변경시키는 부분
}
void serColor(){
}
//색깔을 변경시키는 부분
}
class SampleClass { // 클래스 헤더부분 int a;
int b; // 멤버 변수 부분 int c;
public SampleClass() {
// 생성자 부분. 이름이 클래스 명과 같다
a = x; b = y; c = z;
}
public int sum() {
int d;
d = a + b + c; }
}
객체지향의 특성
- 상속(inheritance) : 부모의 변수와 메서드를 내 것처럼 사용하는 것 / 일반화(generization)
동물 : 움직인다, 입, 다리
- 사람 : 두 다리로 걷는다
- 돼지 : 네 발로 걷는다
- 정보은닉(information hidden) / 캡슐화 (encapsulation)
접근 지정자
- 다형성(polymorphism) : 하나의 기능을 다양하게 사용하는 것
- 추상화 : 설계
고객 : 머리카락, 코, 입, 이름, ... etc.
병원 고객 : 이름, 주소, 전화번호, 병, 건강, 방문기록
의류 고객 : 이름, 주소, 전화번호, 좋아하는 색, 좋아하는 디자인
접근 제어자
- public : 해당 클래스의 필드와 메소드의 사용을 다른 모든 클래스에 허용 그리고 이들은 서브클래스로 상속된다.
- protected : 클래스의 멤버를 클래스 자신과 이 클래스로부터 상속받은 서브클래스에만 접근을 허용
- private : 해당 클래스만이 이 멤버를 사용할수 있다. 외부객체에서는 절대로 접근을 할 수 없다.
- default : 접근제어자를 명시하지 않은 경우의 디폴트 접근제어자이다. 같은 패키지내의 클래스들은 public 권한을 갖고 접근가능하다.
- final : 서브클래스를 가질수 없는 클래스
- abstract : 추상 메소드를 가지는 추상 클래스를 의미
변수 (Variable)
선언 위치에 따른 변수의 종류
(변수의 선언위치가 변수의 종류와 범위(scope)을 결정한다.)
▶ 인스턴스변수(instance variable)
- 각 인스턴스의 개별적인 저장공간. 인스턴스마다 다른 값 저장가능
- 인스턴스 생성 후, ‘참조변수.인스턴스변수명’으로 접근
- 인스턴스를 생성할 때 생성되고, 참조변수가 없을 때 가비지컬렉터에
의해자동제거됨
▶ 클래스변수(class variable)
- 같은 클래스의 모든 인스턴스들이 공유하는 변수
- 인스턴스 생성없이 ‘클래스이름.클래스변수명’으로 접근
- 클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸
▶ 지역변수(local variable)
- 메서드 내에 선언되며, 메서드의 종료와 함께 소멸
- 조건문, 반복문의 블럭{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸
변수의 종류 | 선언 위치 | 생성 시기 |
인스턴스 변수 | 클래스 영역 | 인스턴스 생성시 |
클래스 변수 | 클래스가 메모리에 올라갈때 | |
지역 변수 | 메소드 영역 | 해당 메소드가 호출될때 |
Instance Variable
- 인스턴스 생성 후, ‘참조변수.인스턴스변수명’으로 접근
- 생성 시기 : 인스턴스가 생성될 때
Variables var = new Variable(); // 인스턴스 생성
var.instanceVar = 10 // 참조변수.인스턴스변수명
Class Variables
class Variables {
int instanceVar; // 인스턴스변수 클래스 영역
static int staticVar; // 클래스변수
void method( ) {
int localVar; // 지역변수 메소드 영역
}
}
Class Variable
- 동일 클래스 내의 모든 인스턴스들이 공유하는 변수
- 인스턴스 생성없이 ‘클래스이름.클래스변수명’으로접근
- 생성과소멸: 클래스가로딩될때생성, 프로그램종료될때소멸
Variables.staticVar = 10; // 클래스이름.클래스변수명
class Variables {
int instanceVar; // 인스턴스변수 클래스 영역
static intstaticVar; // 클래스변수
void method( ) {
int localVar; // 지역변수 메소드 영역
}
}
Local Variable
- 메소드 내에 선언되며, 메소드가 실행될 때 생성되고, 종료와 함께 소멸
- 조건문, 반복문의 블럭{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸
Variables var=newVariable(); //인스턴스생성
var.methed() // 참조변수.메소드명
class Variables {
int instanceVar; // 인스턴스변수 클래스 영역
static intstaticVar; // 클래스변수
void method( ) {
int localVar; // 지역변수 메소드 영역
}
}
클래스 변수와 인스턴스 변수
▪ 인스턴스변수 : 인스턴스가 생성될 때마다 생성, 인스턴스 마다 각기 다른 저장 공간 생성 - 동적변수
▪클래스변수:클래스가로딩될때한번만생성, 하나의저장공간을공유, 공통된 값을 갖는 경우 - 정적변수
클래스 변수
▶자바에서의 변수는 다음과 같은 형식으로 선언된다
[public/private/protected] [static/final] 데이터형 변수이름;
☞클래스 변수는 static을 붙여 선언한다
☞클래스 변수는 전역변수의 개념을 가진다.
▶클래스 변수의 용도
☞객체 변수(객체참조,객체속성)는 객체가 생성될 때마다 각 객체에 변수들이 생성되지만, 클래스 변수는 클래스로부터 생성된 객체들의 수와 상관없이 하나만 생성
☞한 클래스로부터 생성된 모든 객체들은 클래스 변수를 공유 ☞클래스 변수를 이용하여 객체들 사이의 통신에 사용하거나 객체들의
공통 속성을 나타낼 수 있다.
☞객체변수와는 달리 클래스 변수는 클래스 이름을 통하여 접근