본문 바로가기
Java | spring/자바 객체지향

Java, 객체지향 프로그래밍!

by 워니 wony 2019. 5. 3.

객체란?

'의사나 행위가 미치는 대상' 우리 주위에 있는 객체를 생각해 보면 사람, 자동차, 건물 . 눈에 보이는 사물은 모두 객체라고 있다. 눈에 보이지 않는 행동(주문, 생산 ) 나타내는 단어로 객체라고 있다.

 

  • 어떤 대상(객체) 가지고 프로그래밍한다!라고 생각

 

객체지향 프로그래밍

: 자료(객체)중심 (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(  )

 

절차지향에서는 조립의 개념이 없었다. 기능을 조립할 없었다.

객체지향 프로그래밍에서는 기능을 서로 조립할 있다.

 

반응형

댓글