1. 왜 OOP 사용할까?
1) 요구사항 변경에 유연하게 대처하고 기능 변경, 재사용을 쉽게 하기 위한 것.
2. 클래스 (Class)란 ?
1) 부류, 종류, 등급,...분류하다, 분류되다.
2) 템플릿(청사진)
3) 속성과 기능을 묶는 것
- 속성 : attribute, fields, value, property,...
- 동작 : operation, function, method,...
4) 개발자가 정의한 형식(Type)으로 개념일 뿐이며
객체를 통해서 메모리에 할당될 때 비로소 사용 가능해짐.
3. 클래스 선언 방법
1)클래스 선언 방법
[가시성지시자] class 클래스명 {
//필드들
[가시성지시자] 자료형 필드명;
....
//메서드들
[가시성지시자] 반환자료형 메서드명([매개변수들...]) {
// 메서드블록에 동작에 관한 내용 작성
}
}
2)사용 방법
클래스명 객체명 = new 클래스명();
4. 클래스와 객체(Object)
1) 클래스
- 객체를 만들어내기 위한 일종의 템플릿
- 메모리에 존재하지 않는다.
- 보통 class 키워드를 사용해 정의
2) 객체
- 클래스로부터 만들어지며 메모리를 차지함.
- 최초에 만들어질때 자신을 초기화하는 생성자(Contructor)를 가짐.
3) new 키워드
- 객체가 생성되면 그 객체는 참조형이되어 동적메모리공간(Heap) 할당 받아 사용할수 있음.
5. 생성자 (Contructor)
1)객체 생성 시
- 속성(필드)에 기본값을 주고 객체를 생성하고 싶은 경우
- 생성자의 이름은 클래스 이름과 같음.
- 생성자는 반환값을 사용하지 않음.
- 클래스로부터 인스턴스화된 객체의 기본 초기화
6. 클래스 구성의 3가지 개념(원칙)
1)캡슐화(Encapsulation)
- 정보를 하나로 묶어주는 것
예) 클래스 (속성과 동작을 묶어놓음)
2)정보 은폐(Information hiding)
- 사용자가 알 필요 없는 정보를 감추기
3)추상화(Abstraction)
- 시스템의 세부사항 중에서 중요한(관심있는) 것과
중요하지 않은(관심 없는)것을 가려내는 과정
7. 캡슐화와 정보 은폐 예
1) - (private) : 나만 볼수 있는 것
2) # (protected) : 부모와 자식에게만 접근 가능
3) + (public) : 누구나 접근 가능
4) ~ (package)
8. 클래스의 상속 (inheritance)
1) 상위의 특징을 그대로 다시 재사용.
2) 상위의 속성이나 기능은 하위에서 새로운 것으로 대체될 수 있음 (Overriding)
3) 하위 클래스에서는 새로운 속성이나 기능을 추가할 수 있음 (확장)
4) this와 super
- 현재 사용 기준 클래스는 this를 통해서 접근하고
기준 클래스의 상위는 super를 통해서 접근할수 있음.
- this()와 super() : 해당 자신 혹은 상위의 생성자를 호출할수 있음.
9. 자바의 최상위 클래스
1) Object 클래스
- 명시적으로 Object 클래스를 상속하지 않아도 Java의 모든 클래스는
Object 클래스의 하위 클래스가 됨.
10. 자바 언어는 단일 상속만을 지원
1) 프로그램의 복잡성을 피하기 위해
2) 다중 상속과 같은 형태를 위해서 인터페이스 사용
11. 하위 클래스가 생성되는 과정
1) 하위 클래스가 생성될때 상위 클래스가 먼저 생성 됨.
2) 상위 클래스의 생성자가 호출되고 하위 클래스의 생성자가 호출됨.
하위 클래스의 생성자에서는 무조건 상위 클래스의 생성자가 호출되어야 함.
3) 하위 클래스에서 상위 클래스의 생성자를 호출하는 코드가 없는 경우
컴파일러는 상위 클래스의 기본 생성자를 호출하기 위한 super()를 추가함.
4) super()로 호출되는 생성자는 상위 클래스의 기본 생성자임.
5) 만약 상위 클래스의 기본생성자가 없는 경우 (매개변수가 있는 생성자만 존재하는 경우)
하위 클래스는 명시적으로 상위 클래스의 생성자를 호출해야 함.
'Web > Java' 카테고리의 다른 글
Java(15) - 추상클래스와 인터페이스 (0) | 2022.01.28 |
---|---|
Java(14) - 다형성 (0) | 2022.01.28 |
Java(12) - 상속과 오버라이딩 (0) | 2022.01.28 |
Java(11) - 컬렉션프레임워크 (0) | 2022.01.28 |
Java(10) - 배열 (0) | 2022.01.28 |
댓글