본문 바로가기

JAVA/JAVA

자바 객체지향의 정의

반응형


객체지향 


JAVA, C++ 

==> 객체지향 프로그래밍


(Object Oriented Programing) ==> OOP

: 현실 세계의 모든 것을 객체화 할 수 있다는 사상

또, 객체를 표현하기 위해서는 그 객체를 나타내기 위한 클래스를 만들고

그 클래스를 통해서 개체를 사용 할 수 있다.


절차지향(함수) -- 대표언어 : C언어



객체지향 프로그래밍의 특징


1) 은닉성

외부로부터 감춘다 (속성 - 멤버변수)


접근명시자

private : 외부로 노출 하지 않을 멤버 

public : 외부로 노출 하는 멤버


==> 일반적으로 속성(멤버변수)들은 private영역에 두고

동작(멤버메소드)들은 public영역에 둔다


private 영역에 access 할수 있는 기능을 만드는 것이 설정자

==> 일반적으로 set 혹은 setter? 붙인다


private 을 만들면 접근자와 설정자가 항상 같이 와야함

setter (설정자) 들은 반환값이 없고

getter (접근자) 들은 반환값이 있다(ex int, double, string 등)


protected



2) 상속성

이미 정의 된 클래스를 확장하여 새로운 클래스를 만들 수 있다.

또, 자바에서 클래스를 정의하면 묵시적으로 자바의 제일 조상 클래스인 

Object 의 후손이 된다


==> 어떤 새로운 클래스를 정의하려고 분석(멤버변수, 멤버메소드)을 해보니

이미 있는 클래스의 속성과 메소드를 대부분 가지고 

여기에 새로운 속성, 새로운 메소드 몇가지만 추가하면

바로 내가 새로 만들고자 하는 클래스가 되겠다.


이미 있는 클래스를 확장(상속)하여

새로 추가되는 속성과 동작만 기술하면 되겠다.

==> 상속성 !!


상속성의 좋은점 

코드를 재사용 할 수 있다.

==> 개발 시간을 단축 시킬 수 있다.

==> 비용을 줄일 수 있다.


** 상속하는 방법

class A{


}


위의 A클래스를 확장(상속)하여 새로운 클래스 B를 만들고자 한다.

class B extends A{


}


상속조건

1. A에 private 이 있다면 메모리는 잡히지만 상속받지 못한다.

그래서 사용하는 것이 protected 이다.

만약 코드 중에 protected 가 있다면 상속받는 클래스가 있다는 것이다.


2. B는 A의 모든 객체, 메소드 등을 똑같이 사용할 수 있다.


3. String name = "코코";

이 처럼 접근명시자(protected, private, public) 등을 생략하면 기본명시자가 friendly

==> 같은 패키지안의 클래스들에는 접근을 허용한다.

하지만 다른 패키지안의 클래스에게는 접근을 허용하지 않는다.

패키지 : 서로 관련있는 클래스끼리 모아놓은 방의 개념

** protected : 외부의 다른 클래스로 부터는 보호하지만 상속받은 자식클래스에게는 접근을 허용한다.


상속계층 : 상속의 중첩(예제 핸드폰) (핸드폰-> 디카-> MP3)



상속클래스에 있는 생성자를 사용할때 주의사항

this()는 반드시 첫번째 문장에 와야한다.

마찬가지로 부로모부터 받은 생성자 역시 첫번째 문장에 와야한다.

super();  <<부모로부터 받은 생성자를 또다시 정의하지 않고 받아오는 것에 사용



** 상속관계에 있을때 부모생성자의 매개변수를 갖지 않는 생성자를 정의 하지 않았을때의 문제!!

// 상속과 생성자

생성자는 객체생성시에 자동수행되어 멤버변수를 초기화 할 목적으로 사용된다.

객체생성시에 자동수행 됩니다.

개발자가 특별히 생성자를 만들지 않아도 기본생성자가 제공된다.



3) 다형성

같은 메소드를 호출했는데 객체마다 동작하는 방식이 각각 다르다.(= 객체가 다르게 반응한다.)

하라고 시킨일은 같은 것이지만 결과물은 다른것.



반응형