1. 다형성

- 조상 클래스 타입의 찹조변수로 자손클래스의 인스턴스를 참조할 수 있는 것

-> 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라짐

-> 참조변수 멤버의 개수 <= 인스턴스 멤버의 개수

- 참조변수의 형변환 : 서로 상속관계에 있는 클래스 사이에서만 가능

-> 참조변수의 타입 변환하는 것으로 인스턴스에 영향 없음

-> 형변환을 통해 참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 범위(개수)를 조절하는 것

-> 참조변수가 가리키는 인스턴스의 자손타입으로 형변환은 허용 안함

- instanceof 연산자 : 형변환하기전에 instanceof 체크 필수

-> 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해

-> true : 참조변수가 검산한 타입으로 형변환 가능한 것 (값이 NULL이면 false)

- 참조변수와 인스턴스의 연결

-> 참조변수 타입에 따라 멤버변수 달라짐, 영향은 없음 실제 인스턴스의 메서드(오버라이딩된 메서드) 호출

- 장점1 : 매개변수의 다형성

-> 메서드의 매개변수로 조상 클래스의 자손타입의 참조변수면 어느 것이나 매개변수로 받아들일 수 있음

- 장점2 : 여러 종류의 객체를 배열로 다루기

-> 조상 타입의 참조변수를 배열로 사용 시, 공통의 조상을 가진 서로 다른 종류의 객체르 배열로 묶을 수 있음


2. 추상클래스 (키워드 : abstract)

- 미완성 메서드(추상 메서드)를 포함하고 있는 것

- 인스턴스 생성 X, 상속을 통해 자손클래스에 의해서만 완성가능

- 생성자 존재, 멤버변수, 메서드 선언 가능

- 추상메서드 : 선언부만 작성, 구현부 미작성

-> abstract 리턴타입 메서드이름();

-> 추상클래스로부터 상속받은 자손클래스는 오버라이딩을 통해 조상인 추상클래스의 추상 메서드를 모두 구현해야 함

- 작성 : 추상화는 기존의 클래스의 공통부분을 뽑아내서 조상클래스를 만드는 것

- 추상메서드로 선언하는 이유 : 자손 클래스에서 추상메서드를 반드시 구현하도록 강요하기 위해


3. 인터페이스

- 일종의 추상클래스로 오직 추상메서드, 상수만을 멤버로 가짐

- 목적 : 다른 클래스 작성 시 도움

- 작성 : interface 인터페이스이름{

public static final 타입 상수이름 = 값;

public abstract 메서드이름(매개변수목록);

}

- 다중상속 가능

- 인터페이스의 구현 ( 키워드: implements)

- 상속, 구현 동시에 가능

- 인터페이스를 이용한 다형성

-> 인터페이스 타입의 변수로 인터페이스를 구현한 클래스의 인스턴스 참조 가능

-> 매개변수 타입이 인터페이스인 경우 : 해당 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 제공

-> 메서드의 리턴타입을 인터페이스의 타입을 지정 : 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것

- 인터페이스 장점 : 개발기간 감소, 표준화, 클래스간 관계 생성, 독립적 프로그래밍

- 선언과 구현을 분리 가능


* 인터페이스 : 다중상속, 추상화 높음, 완전껍데기

* 추상클래스 : 단일상속, 추상화, 부족한것 (iv, 메서드)

'Java' 카테고리의 다른 글

객체지향 프로그래밍 정리2  (0) 2018.03.19
객체지향 프로그래밍 정리1  (0) 2018.03.19

1. 상속

- 상속의 정의와 장점 ex ) class Child extends Parent { }

-> 정의 : 기존의 클래스를 재사용하여 새로운 클래스 작성 : 관계 맺음

-> 자손 클래스는 조상 클래스의 모든 멤버를 상속 받음

-> 생성자와 초기화 블럭은 상속 X, 멤버만 상속 O

-> 자손 클래스 멤버 개수 >= 조상 클래스 멤버 개수

- 포함 관계 : 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것 ex) class Circle { Point c = new Point(); }

- 클래스 간의 관계 결정

-> 상속 관계 : '~은 ~이다 (is -a)' : 비중이 높은 것 1개만

-> 포함 관계 : '~은 ~을 가지고 있다 (has -a)'

- 단일 상속 : 자바에서는 단일 상속만을 허용

- Object 클래스 : 모든 클래스의 조상

-> 상속받는 클래스가 없는 경우 자동으로 추가

-> toString(), equals(Object o)와 같은 메서드가 Object클래스에 정의된 것


2. 오버라이딩

- 조상 클래스로부터 상속받은 메서드의 내용 변경

- 조건 : 이름 동일, 매개변수 동일, 반환타입 동일

-> 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경 X

-> 조상 클래스의 메서드보다 많은 수의 예외 선언 X

-> 인스턴스 메서드, Static 메서드 서로 오버라이딩 불가

- super : 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수

- super() : 조상 클래스의 생성자 호출

-> 모든 클래스의 생성자는 첫 줄에 반드시 자신의 다른 생성자 & 조상의 생성자 호출


3. package와 import

- 패키지 : 클래스의 묶음

- 패키지 선언 : package 패키지명 ;

- 지정하지 않은 경우 : '이름 없는 패키지'에 속함

- 'd'옵션 : 지정한 디렉토리에 클래스 파일 생성, X경우 자동 생성

- import문 : 사용하고자 하는 클래스의 패키지를 미리 명시

-> 성능에 영향 X, 컴파일 시간만 증가


4. 제어자

- 접근 제어자(택1) : public, protected, default, private

- 그 외 : static, final, abstract, native, transient, synchronized, volafile, strictfp

- 접근 제어자

 제어자

 같은 클래스

같은 패키지

자손 클래스

전체 

 public

 

 

 

 

 protected

 

 

 

 

 default

 

 

 

 

 private

 

 

 

 

- 이유 : 외부로부터 데이터 보호, 내부적으로 사용되는 부분을 감추기 위해

'Java' 카테고리의 다른 글

객체지향 프로그래밍 정리3  (0) 2018.03.20
객체지향 프로그래밍 정리1  (0) 2018.03.19

1. 객체지향 언어 

- 코드의 재사용성이 높다, 유지보수 용이, 중복된 코드 제거 (상속, 다형성, 캡슐화)


2. 클래스와 객체

- 클래스 : 객체 정의해 놓은 것, 객체 생성에 사용

- 객체 : 실제로 존재하는 것, 용도는 멤버(기능/속성)에 따라 다름

- 인스턴스화 : 클래스 -> 인스턴스(객체) 

- 인스턴스는 참조변수를 통해서만 다룰 수 있고, 타입은 일치해야 한다.

- 객체 배열 : 객체의 주소가 저장됨, 참조변수들을 하나로 묶은 참조 변수 배열

- 클래스의 또 다른 정의 : 변수, 함수를 하나의 클래스에 정의, 관계가 깊은 변수, 함수들을 함께 다룰 수 있음

ex ) Time의 시, 분, 초를 하나로 묶음


3. 변수와 메서드

- 변수의 종류와 특징

- 클래스 변수 : 클래스 영역 선언, 클래스가 메모리에 올라갈때 생성

- 인스턴스 변수 : 클래스 영역 선언, 인스턴스가 생성될 때 생성

- 지역 변수 : 클래스 이외 영역 선언, 변수 선언문 수행될 때 생성

-> 인스턴스 변수는 각기 다른 값 유지, 클래스 변수는 공통된 값

- 메서드 : 특정 작업을 수행하는 일련의 문장을 하나로 묶은 것

- 장 : 높은 재사용성, 중복 코드 제거, 프로그램 구조화

- 선언부 : 반환타입 메서드이름 ( 타입 변수명 ...)       -> 변경 시 메서드 호출되는 모든 곳 변경 필요

- 구현부 : 메서드 호출 시 수행될 코드     -> return문 : 반환 타입과 일치, 자동 현변환 가능한 타입

- 호출 : 같은 클래스 내 메서드끼리는 참조변수 미사용하여 호출 가능,

단, static메서드는 같은 클래스 내 인스턴스 메서드 호출 불가

- 유효성 검사 : 매개변수의 값이 적절한지 확인

- JVM의 메모리 구조

- 메서드 영역 : 클래스 데이터, cv

- 호출 스택 : 메서드 작업, lv

- 힙 : 인스턴스 생성, iv

- 기본형 매개변수 : 값이 복사 (read only)

- 참조형 매개변수 : 인스턴스의 주소가 복사 (read & write)

-> 배열도 객체와 같이 참조변수를 통해 데이터가 저장된 공간에 접근

- 참조형 반환타입 : 메서드가 객체의 주소 반환

- 재귀호출 : 메서드 내부에서 자신을 다시 호출

- 클래스 메서드 (static 메서드), 인스턴스 메서드

-> 인스턴스 변수와 관련된 작업(필요로 하는 메서드) ? 인스턴스 메서드 : 클래스 메서드(인스턴스 생성 없이 호출 가능)

-> 멤버변수 중 모든 인스턴스에 공통 사용되는 것 : static 변수 ( static 멤버들은 인스턴스 멤버들 참조 X)

- 클래스 멤버와 인스턴스 멤버간의 참조와 호출

-> 클래스 멤버가 인스턴스 멤버 호출 시점에 멤버가 존재하지 않을 수 있음

-> 인스턴스 멤버가 존재 -> 인스턴스가 이미 생성된 것 -> 인스턴스 멤버간 호출 문제 X


4. 오버로딩 : 하나의 메서드 이름으로 여러 기능 구현

- 조건 : 이름이 같아야 함, 매개변수 개수/타입이 달라야함, 리턴타입의 구현에 영향이 없음  ex) println();

- 장점 : 이름이 절약되며, 기억하기 쉬워 오류 가능성 낮음


5. 생성자

- 생성자 : 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드

- 조건 : 클래스 이름과 동일, 리턴 값 없음 

- ex ) Card c = new Card();

-> 연선자 new : 힙에 Card 클래스의 인스턴스 생성 

-> 생성자 Card() 호출, 수행 

-> 연선자 new 결과로 Card인스턴스 주소가 반환되어 참조변수 c에 저장

- 기본 생성자 : 컴파일러에 의해 자동으로 추가되는 경우는 클래스에 정의된 생성자가 하나도 없을 때

- 매개변수가 있는 생성자 : 인스턴스 생성과 동시에 원하는 값으로 초기화

- 생성자에서 다른 생성자 호출하기 : this(), this

- 조건

-> 생성자의 이름으로 클래스 이름 대신 this 사용

-> 한 생성자에서 다른 생성자 호출 시 반드시 첫 줄에서만 호출이 가능 ( this (~); )

- this : 참조변수로 인스턴스 자신을 가리킴


6. 변수의 초기화 : 변수 선언 후 처음으로 값을 저장하는 것

- 지역변수는 사용하기 전 초기화 필수

- 멤버변수는 자동 초기화 됨

- 명시적 초기화 : 변수 선언과 동시에 초기화

- 초기화 블럭 : 초기화 작업이 복잡하여 명시적 초기화만으로 부족한 경우

- 멤버변수의 초기화 시기와 순서 ( 자동 -> 간단 -> 복잡)

->클래스 초기화 : 기본값 -> 명시적 초기화 -> 클래스 초기화 블럭

-> 인스턴스 초기화 : 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블럭 -> 생성자

'Java' 카테고리의 다른 글

객체지향 프로그래밍 정리3  (0) 2018.03.20
객체지향 프로그래밍 정리2  (0) 2018.03.19

+ Recent posts