객체란?
'의사나 행위가 미치는 대상' 우리 주위에 있는 객체를 생각해 보면 사람, 자동차, 건물 등. 눈에 보이는 사물은 모두 객체라고 할 수 있다. 눈에 보이지 않는 행동(주문, 생산 등)을 나타내는 단어로 객체라고 할 수 있다.
- 어떤 대상(객체)를 가지고 프로그래밍한다!라고 생각
객체지향 프로그래밍
: 자료(객체)중심 (Object Oriented Programing)
객체 지향 프로그래밍을 할 때는 객체를 먼저 정의하고 각 객체가 어떤 기능을 제공하고 객체 간 협력을 어떻게 구현할 것인지 고민해야 한다.
- 객체 지향 프로그램은 클래스를 기반으로 프로그래밍
- 클래스는 객체의 속성과 기능을 코드로 구현 한 것
객체지향 프로그래밍의 특징
ㅇ 은닉성(Encapsulation)
클래스의 외부로부터 속성(멤버변수)를 보호하는 것이 목적
- 접근명시자
private 외부로 부터 은닉할 멤버(속성) 앞에 쓴다.
public 외부로 부터 노출해도 될 멤버 앞에 쓴다.
- 클래스
속성 (멤버변수) 일반적으로 속성(변수)은 private
동작 (멤버 method) 일반적으로 동작(함수,method)은 public
때에 따라 멤버변수이지만 다른 클래스(아무나)에서 사용해도 된다면 public에 둘 수도 있고, 멤버 메소드 이지만 중요해서 외부로 부터 접근할 수 없도록 하려면 private에 둘 수도 있다.
접근제어자 |
설명 |
public |
외부 클래스 어디에서나 접근 가능 |
protected |
같은 패키지 내부와 상속 관계의 클래스에서만 접근 가능 그 외 클래스는 접근 불가 |
아무것도 없는 경우 |
Default이며 같은 패키지 내부에서만 접근 할 수 있다. |
private |
같은 클래스 내부에서만 접근 가능 |
public이라고 선언한 변수나 메서드는 외부 클래스에서 접근이 가능하며 외부 클래스가 사용할 수 있다는 뜻.
반대로 접근 제어자를 private으로 선언한 변수나 메서드는 외부 클래스에서 사용할 수 없다.
- get( ) set( ) 메서드
private로 선언한 변수는 외부에서 사용하려면 get( )메서드(getter) set( ) 메소드(setter)를 활용하여 접근해야 한다.
public class Person {
private age;
public int getAge( ) {
return age;
}
public int setAge( int age ) {
this.age = age;
}
}
다른 클래스에서 위의 클래스의 멤버변수인 age에 접근하기 위해서는 getter 와 setter를 사용해야 한다. getter로는 값을 가져 올 수 있고, setter로는 값을 입력할 수 있다. 외부클래스에 private변수에 직접 접근 할 수 없지만, public 메서드를 통해 접근 할 수 있다.
public class PersonTest {
public static void main(String [ ]args){
Person p = new Person( );
p.setAge(25);
System.out.println(p.getAge( ));
}
}
ㅇ캡슐화(encapsulation)
여러 개의 자료 및 처리 과정을 하나의 모듈(부품)처럼 사용하므로 객체간의 이식성이 높기 때문에 캡슐화(encapsulation)가 빠지지 않는다.
- 캡슐화란 관련 있는 자료 그리고 동작들을 하나로 묶어 요약하고 사용자에게는 내부적인 접근을 허용하지 않는 대신에 사용의 편의성을 제공해 주는 것
- 정보은닉이라는 것은 캡슐화의 장점에 속하는 것
'접근 제한법'을 이용하여 자료(instance 변수)를 외부로부터 직접적인 접근을 철저히 차단하고, 자료를 수정 또는 조작할 수 있는 동작들은 내부에 둔다. 내부에서는 어떠한 자료가 있는지 어떻게 동작하는지 알 수 없고, 접근 용이한 메서드를 통해 결과만 받을 뿐. 이것을 '정보은닉'이라고 한다.
ㅇ 상속성
코드의 재 사용성을 높일 수 있다.
시간단축, 비용 줄일 수 있다.
- 클래스의 사이의 관계
has a => 어떤 클래스 또 다른 클래스 부품(속성)
is a => 어떤 클래스 또 다른 클래스 자식 => 상속
ㅇ 다형성
내가 준 메시지는 동일한데 객체마다 동작하는 것이 다른 것
[ 참고 ] 절차지향 프로그래밍
절차지향 프로그래밍 : 기능 중심(객체지향 전에는 절차지향이 었음)
사용자의 요구조건이 복잡해 짐에 따라 전역변수(모든 명령어에서 사용 가능한 변수)를 사용했다. c 기능에서는 사용 안 해야 하는데도 사용하다 보니 문제가 생기게 되었다.
a( 변수1 )
b( 변수2 ,변수3 )
c( )
…
절차지향에서는 조립의 개념이 없었다. 기능을 조립할 수 없었다.
객체지향 프로그래밍에서는 기능을 서로 조립할 수 있다.
'Java | spring > 자바 객체지향' 카테고리의 다른 글
Java 프로그래밍 기본, 메소드 method (0) | 2019.05.07 |
---|---|
구현되지 않은, 추상클래스(abstract class) (0) | 2019.05.07 |
Java Class 구조, 접근명시자(static, public) (0) | 2019.05.07 |
상속과 다형성, 오버라이딩?! 오버로딩?! (0) | 2019.05.07 |
객체지향과 절차지향 프로그래밍?! (0) | 2019.05.06 |
댓글