일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- I/O
- 동적 버튼 생성
- 자바
- 변수초기화
- Thread
- 객체
- MAP
- 동적 데이터
- IBatis 게시판
- 연산자
- Java
- 변수
- 고급자바
- 코딩
- 조건문
- 객체지향
- comparator
- io
- IBatis CRUD
- 쓰레드
- 계산기
- oclick 동적
- 기초
- 동적 버튼 onclick
- iBatis
- enum
- Comparable
- 변수선언
- ListSort
- 동적 문자열
- Today
- Total
Jun's Blog
[Java] 객체지향 프로그래밍 - 2 본문
1. 상속 (~은 ~이다) : is a
- 기존의 클래스를 재사용하여 새로운 클래스를 만든다.
- 적은 양의 코드로 새로운 클래스를 작성할 수 있다.
- 새로 작성하고자 하는 클래스의 뒤에 상속받고자 하는 클래스를 키워드 'extends'와 함께 써주기만 하면 된다.
class Child extends Parent {
}
- 상속을 해주는 클래스를 '조상클래스', 상속을 받는 클래스를 '자손클래스' 라고 부른다.
: 조상클래스 - 상위클래스, 부모클래스, 기반클래스
: 자손클래스 - 하위클래스, 자식클래스, 파생된클래스
- 상속을 받을 때는 멤버만 상속 받는다.
- 항상 자손클래스가 부모클래스보다 같거나 크다.
2. 포함(~은 ~을 포함하고 있다) : has a
- 상속 이외에 클래스를 재사용하는 방법
- 자손클래스의 멤버 변수로 다른 클래스를 선언하는 방법
3. toString()
- 인스턴스의 정보를 제공할 목적으로 사용
- 참조변수를 출력하면 참조 변수가 가리키고 있는 인스턴스의 toString()를 호출
Tv t = new Tv();
System.out.println(t.toString());
4. 단일상속
- 자바에서는 단일 상속(두 개 이상 불가)만 가능
class TVCR extends Tv, VCR { //허용하지 않는다.
}
- Tv와 VCR에 동일한 메서드가 존재한다면 어떤 메서드를 상속받는지 알 수 없다.
- Tv의 메서드 명을 변경한다면 그동안 사용해 온 모든 곳을 수정해주어야 한다.
- 클래스 간의 관계가 명확해진다.
5. Object 클래스(모든 클래스의 최상위 클래스)
- 다른 클래스를 상속받지 않는 클래스는 object 클래스를 상속받는다.
class A (extend object) {
}
- 모든 클래스는 object 클래스를 상속받게 되어 있다.
- toString()나 equals()를 사용할 수 있는 것은 object 클래스의 메서드이기 때문이다.
6. 오버라이딩(Overriding)
- 조상 클래스로부터 상속받은 메서드의 내용을 재정의 하는 것. (내용이 마음에 안 들어서 재정의)
- 오버라이딩이 되기 위한 조건(선언부가 동일하면 된다)
: 메서드명이 동일해야 한다.
: 매개변수의 개수와 타입이 같아야 한다.
: 반환타입이 같아야 한다.
- 부모클래스로부터 상속받는 자손클래스의
: 접근제어자는 부모보다 좁은 범위로 설정할 수 없다. (홈페이지 관리자, 회원, 비회원 같은 차이점)
: 예외의 갯수는 조상클래스의 메서드보다 많이 선언할 수 없다.
제어자 void method() 예외처리 {
}
7. super.
- 조상 클래스의 멤버와 자손 클래스의 멤버의 명칭이 중복 정의되어 있을 때 구분할 목적으로 사용
- 조상의 멤버와 자손의 멤버를 구분한다는 점을 제외하고는 this. 과 동일
- this. 은? 클래스 내 지역변수와 인스턴스변수가 명칭이 같을 때 구분 지을 때 사용
8. super() - 조상클래스의 생성자
- this()와 마찬가지로 super()도 생성자 호출이다.
- this()는 같은 클래스 내의 생성자에서 다른 생성자를 호출할 때 사용
- super()는 자손클래스의 생성자 내에서 부모클래스의 생성자를 호출할 때 사용
9. 제어자
- 변수, 메서드 그리고 클래스의 선언부에 사용이 된다.
- 접근 제어자와 그외 제어자로 나뉜다.
- 접근제어자
: public, protected, default, private
- 그 외 제어자
: static, final, abstract, native,... 등등
- 일반적으로 접근 제어자를 가장 왼쪽에 써준다.
public static final int a;
- static (클래스의, 공통적인)
: 변수, 메서드, 초기화 블록에 사용할 수 있다.
: 변수나 메서드에 사용시
1) 모든 인스턴스에서 공통적으로 사용
2) 인스턴스의 생성없이 사용할 수 있다.
3) 클래스가 Method Area에 로드될 때 같이 생성한다.
4) 클래스 멤버에서는 인스턴스 멤버를 호출할 수 없다.
- final(마지막의, 변경될 수 없는)
: 변수에 사용시 값을 변경할 수 없는 상수가 된다.
: 메서드에 사용시 오버라이드 할 수 없는 메서드가 된다.
: 클래스에 사용시 상속할 수 없는 클래스가 된다. (부모클래스x)
- abstract(추상의, 미완성의)
: 메서드와 클래스에만 사용이 가능하다.
: 메서드는 선언부와 구현부로 되어있지만 추상메서드는 선언 부만 존재
: 추상메서드를 가지고 있다면 해당 클래스는 추상 클래스가 되어야 한다.
abstract class A {
abstract void method();
}
10. 접근 제어자
- public
: 접근제한이 없다.
- protected
: 같은 패키지 + 다른 패키지에 있는 클래스의 자손 클래스에는 접근 가능
: 클래스에는 사용 불가
- default
: 같은 패키지 내에서만 사용 가능
- private
: 같은 클래스 내에서만 사용가능
: 클래스에는 사용 불가
11. 캡슐화
- 접근 제어자를 사용하는 이유
: 외부로부터 데이터를 보호하기 위해서
: 외부에는 불필요한 부분을 감출 수 있다.
12. 생성자의 접근 제어자
- 인스턴스의 생성을 제한할 수 있다.
- 생성자의 접근제어자를 private으로 할 경우
: 외부에서는 생성자에 접근할 수 없으므로 인스턴스를 생성할 수 없다.
: 다른 클래스의 조상이 될 수 없다.
: 다른 클래스의 조상이 될 수 없으므로 final을 붙여 주어야 한다.
13. 다형성(Polymorphism)
- 여러가지 형태로 가질 수 있는 능력
- 부모타입의 참조 변수로 자식 타입의 인스턴스를 참조할 수 있다.
14. 참조변수의 형변환
- 상속 관계에서만 가능하다.
- 자식타입 -> 부모 타입 : up-casting, 케스트 연산자 생략 가능
- 부모타입 -> 자식 : down-casting, 캐스트 연산자 생략 불가
15. instanceof 연산자
- 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 사용
- 연산결과가 true이면 검사한 타입으로 형변환이 가능하다.
- 클래스멤버는 참조 변수의 타입에 영향을 받는다.
- 참조변수의 타입에 영향을 받지 않는 것은 인스턴스 메서드뿐이다.
16. 매개변수의 다형성
- 참조변수의 다형적인 특징은 매개변수에도 적용된다.
17. 여러객체배열, vector
- 배열은 한번 크기를 정하면 변경할 수가 없다. 이를 해결하기 위해 만들어졌다.
- Vector 는 동적으로 크기가 관리되는 객체 배열이다.
: Vector() => 10개의 객체를 보관을 저장할 수 있는 Vector 객체를 만든다.
: add() => Vector에 객체를 추가한다.
: remove() => Vector에서 객체를 삭제한다.
: isEmpty() => Vector가 비어있는지 확인한다.
: get(int index) => index번째 객체를 가져온다
: size() => 저장된 객체의 수를 반환한다.
18. 추상클래스(abstract)
- 미완성된 클래스
: 미완성된 메서드를 포함하고 있다.
- 추상메서드
: 미완성된 메서드이다.
: 선언부와 구현부로 이루어져 있지만 추상메서드는 구현부가 없다.
- 어떤 기능을 수행할 목적으로 만든 것인지 알려준다.
19. 인터페이스(Interface)
- 일종의 추상클래스이지만 멤버변수로 상수와 추상메서드만 가진다.
- 작성방법
interface 인터페이스명 {
public static final 변수타입 변수명 = 값;
public abstract 반환타입 메서드명 (매개변수);
}
- 모든 변수는 public static final 이어야 한다. <생략 가능>
- 모든 메서드는 public abstract 이어야 한다. <생략 가능>
- 인터페이스의 상속 (다중상속이 가능)
: 인터페이스는 클래스를 상속할 수 없다.
=> 클래스를 상속받으면 인터페이스가 아니게 된다.
: 인터페이스는 인터페이스르를 다중 상속할 수 있다.
- 인터페이스의 구현
: 자체로는 객체를 생성할 수 없다.
: 자신이 정의된 추상메서드의 몸통을 만들어주는 클래스가 존재해야 한다.
: 상속 => extends , 구현 => implements
: 인터페이스의 일부분만 구현하였다면 해당 클래스는 추상클래스가 된다.
: ~을 할 수 있는(able)
: IMemeber => IMemberImpl (구현체)
- 인터페이스의 장점
: 개발시간을 단축시킬 수 있다.
: 표준화가 가능하다.
: 서로 관계가 없는 클래스들들에게 관계를 설정해 줄 수 있다.
: 독립적인 프로그래밍이 가능하다.
- 인터페이스의 이해
: 클래스를 사용한 쪽(user)과 제공하는 쪽(provier)으로 나눈다.
: 메서드를 사용하는 쪽에서는 선언부만 알면 된다.
A - I - B (직접관계 -> 간접관계)
'Java' 카테고리의 다른 글
[Java] 도형 그리기 프로그램 (세모, 동그라미) (0) | 2020.09.29 |
---|---|
[Java] 주사위 프로그램 (0) | 2020.09.29 |
[Java] 계산기 프로그램 (0) | 2020.09.29 |
[Java] 객체지향 프로그래밍 - 1 (0) | 2020.09.26 |
[Java] 조건문, 반복문 (예제 풀이 및 해답) (0) | 2020.09.18 |