본문 바로가기

프로그래밍/Java

6.객체지향개념2

객체지향의 특징 

1) 상속 - 기존 클래스 확장

2) 캡슐화 - 보호,은닉

3) 다형성 - 매개변수의 다형성, 하나의 배열에 여러 종류의 객체를 다룰 수 있다. 


클래스간의 관계 - 상속관계, 포함관계

6. 상속 : 기존의 클래스로 새로운 클래스를 작성하는 것

 - 두 클래스를 조상과 자손으로 관계를 맺어주는 것

 - 자손은 조상의 모든 멤버를 상속받는다.

 - 자손의 멤버변수는 조상보다 적을 수 없다. ( 멤버개수 : 자손 > 조상)

 - 공통적인 부분은 조상에서 수정, 개별적인 부분은 자손에서 수정한다. 

  포함 : 한 클래스의 멤버변수로 다른 클래스를 선언하는 것 →  복잡도 ↓, 재사용성↑

 자바는 다중상속이 안되기 때문에 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.

Object 클래스 : 모든 클래스의 최상위 클래스

- 조상이 없는 클래스는 자동으로 Object 클래스를 상속받는다.


오버라이딩

 - 상속받은 메서드의 내용을 변경하는 것

오버라이딩의 조건

 1) 선언부가 같아야 한다.

 2) 접근제어자를 좁은 범위로 변경할 수 없다.

 3) 조상클래스의 메서드보다 만은 수의 예외를 선언할 수 없다.

오버로딩과 오버라이딩의 차이점

 오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것 (new)

 오버라이딩 : 상속받은 메서드의 내용을 변경하는 것 (change)

 

참조변수 super와 this

 super : 조상의 멤버와 자신의 멤버를 구분하는데 사용한다.

 this : iv(인스턴스변수)와 lv(지역변수)를 구별하는데 사용한다. → 객체 자신을 가르키는 참조변수

super() - 조상의 생성자

 자손클래스의 인스턴스를 생성하면 조상+자손의 멤버가 합쳐진 하나의 인스턴스가 생성된다.

 자손의 생성자의 첫 문장에서 조상의 생성자를 호출해야 한다. (조상 멤버 초기화)


제어자

 - 제어자(캡슐화) : 클래스, 변수, 메서드의 선언부에 선언되며 부가적인 의미를 부여한다.

    접근제어자 : public , protected, default, private

    그 외 : static, final, abstract, native, ....


static 제어자

 static 멤버변수 : 모든 인스턴스에 공통적으로 사용되는 클래스변수

인스턴스를 생성하지 않고 사용 가능하다.

 static 메서드 : 인스턴스를 생성하지 않고 호출할 수 있다.

                    인스턴스 멤버들을 직접 사용할 수 있다.

final 제어자

 - 마지막의, 변경될 수 없는, 의미를 가지고 있다.

 final의 사용

 변수 : 값을 변경할 수 없는 상수가 된다.

 메서드 : 오버라이딩을 할 수 없는 메서드가 된다.

 클래스 : 확장할 수 없는, 변경될 수 없는 클래스 → 다른 클래스의 조상이 될 수 없다.


접근제어자

 - 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다.

 


접근제어자 사용 이유 

 1) 데이터를 외부로부터 보호하기 위해 사용한다.

 2) 불필요한 부분을 감추기 위해 사용한다.

 → 접근하려면 메소드를 통해서 접근 가능하다.


생성자의 접근제어자 (싱글톤패턴)

 -생성자에 접근제어자를 사용하면 인스턴스 생성을 제한할 수 있다.

 -생성자에 접근제어자를 private로 지정하면, 외부에서 생성자에 접근할 수 없다.

→ 인스턴스를 생성해서 반해주는 public메서드로 외부에서 이 클래스의 인스턴스를 사용가능

→ 생성자가 private면 다른 곳에서 접근할 수 없기 때문에 다른 클래스의 조상이 될 수 없다.


다형성

 - 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것 → 조상의 참조변수로 자손의 객체를 다루는 것

 - 단, 자손 -> 조상은 참조할 수없다. (많은 기능으로 적은 기능을 사용하는 것은 불가능하다)

 참조변수의 형변환 

 - 기본형 변수와 같이 참조변수도 형변환이 가능하다.

 - 단, 서로 상속관계에 있는 클래스사이에서만 가능하다.

 → 형변환 : 참조변수의 타입을 변환, 참조할 수 있는 인스턴스에서 사용할 수 있는 멤버의 범위를 조절한다.

instanceof 연산자

 -인스턴스의 실제 타입을 체크하는데 사용한다. (리모콘이 실제로 가르키는 것이 어떤 것인지 확인)

 1) 실제타입체크

 2) 형변환가능여부

  → 연산결과가 true면 해당 타입으로 형변환이 가능하다.

참조변수와 인스턴스변수의 연결 (예제 p.364)

 - 멤버변수가 중복정의된 경우, 참조변수의 타입에 따라 연결되는 멤버변수가 달라진다 → 참조변수타입에 영향 받음

 - 메소드가 중복정의된 경우, 참조변수의 타입에 관계없이 항상 실제 인스턴스의 타입에 정의된 메서드가 호출된다.

   → 참조변수타입에 영향받지않음.

매개변수의 다형성(예제 p367)

 -참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 줄 수 있다.

여러 종류의 객체를 배열로 다루기 (예제 p370)


추상클래스

 - '미완성설계도' , 추상메서드를 포함하고 있는 클래스

 - 다른클래스를 작성하는데 도움을 줄 목적으로 작성된다

 - 인스턴스를 생성할 수 없다. (객체가 만들어진 후 사용가능하다)

추상메서드

 - 선언부만 있고 구현부가 없는 메서드

 - 반드시 필요하지만 자손마다 다르게 구현해야 할 것으로 예상되는 경우에 사용한다.

 - 추상메서드를 상속받는 자손클래스에서 구현부를 완성해야한다. (상속받는곳에서 구현부를 완성)

작성예제 


 → 여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나 기존클래스의 공통 부분을 뽑아서           추상클래스를 작성한다.

※주의사항

 - 추상메서드가 2개인데 1개만 정의했을 경우 클래스 앞에 abstract를 붙혀야 한다.


인터페이스

 - 추상메서드의 집합 ,  (알맹이 업는 껍데기)

 - 규칙에 맞게 구현하도록 표준을 제시하는데 사용된다.

 - 모든 멤버변수는 public static final, 모든 메서드는 public abstract 이어야 하며, 생략가능하다. (항상 그렇기 때문)

인터페이스의 상속

 - 인터페이스도 클래스처럼 상속이 가능하며 클래스와 달리 다중상속을 허용한다.

 - Object클래스와 같은 최고 조상이 없다.

인터페이스의 구현

 -인터페이스에 구현된 추상메서드를 완성하는 것. → 선언부만 있는 추상메서드의 구현부를 작성한다.

 -인터페이스를 구현하는 것은 클래스를 상속받는 것과 같다. 다만 'extends'대신 'implements'를 사용

 -상속과 구현이 동시에 가능하다

--예제7-24 p383--

인터페이스 - 다형성

 -인터페이스 타입의 변수로 인터페이스를 구현한 클래스의 인스턴스를 참조할 수 있다.

 -인터페이스를 메서드의 매개변수의 타입으로 지정할 수 있다. 

 -인터페이스를 메서드의 리턴타입으로 지정할 수 있다.

--예제7-25 p388--

인터페이스의 장점

 1) 개발시간을 단축할 수 있다.

 2) 표준화가 가능하다.

 3) 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다.

 4) 독립적인 프로그래밍이 가능하다.

인터페이스의 이해

 -두 대상(객체) 간의 '연결,대화,소통'을 돕는 '중간 역할'을 한다.

 -선언(설계)와 구현을 분리시키는 것을 가능하게 한다.

 →  A-B의 관계(강결합)를 // A-I-B의 관계로 만들어서 인터페이스 변경하기 용이하게 만든다. (느슨한 결합)


+내부클래스


'프로그래밍 > Java' 카테고리의 다른 글

8. java.lang패키지와 유용한클래스  (0) 2018.05.07
7. 예외처리  (0) 2018.05.07
5. 객체지향개념  (0) 2018.05.01
4. 배열  (0) 2018.05.01
3. 조건문과 반복문  (0) 2018.05.01