0. 상속(Inheritance)
개요
- 학습 목표
- 상위 클래스-하위 클래스의 상속 관계 이해
- extends 키워드로 상속 관계 정의
- 포함관계 상속관계 차이
- 상속관계에서 메서드 오버 라이딩
- super와 super() 차이
- Object 클래스가 자바 클래스의 상속계층도에서 최상위
상속
- 상속
- 기존의 클래스를 재활용해 새로운 클래스 작성
- 상위 클래스와 하위 클래스로 나뉘어 멤버를 공유
- 하위 클래스 멤버 개수는 상위랑 같거나 크다
- 코드를 재사용하여 적은 양의 코드로 새로운 클래스 생성
- 하나의 객체가 여러 모양으로 표현되는 다형성이 가능
- 코드 예제
- 클래스명 extends 상위 클래스로 정의
- 단일 상속만 가능(인터페이스를 이용해 비슷한 효과 가능)
포함 관계
- 포함 관계
- 클래스 멤버로 다른 클래스 타입의 참조 변수를 사용하는 것
- 클래스 간 관계는 포함관계가 대다수이다
- 상속과 구분 방법
- Is -A(이다) : 상속
- Has -A(가지고 있다) : 포함 관계
메서드 오버 라이딩
- 메서드 오버 라이딩(method overriding)
- 상위 클래스로부터 상속받은 메서드를 동일한 이름의 메서드로 재정의
- 메서드 오버 라이딩 조건
- 메서드의 선언부(메서드 이름, 매개변수, 반환 타입)가 상위 클래스와 일치
- 접근 제어자의 범위가 상위 클래스 메서드보다 같거나 넓어야 함
- 예외는 상위 클래스보다 많이 선언할 수 없다
- 상위 클래스 타입을 선언
- 배열을 통해 관리가 편하다
- super 키워드와 super()
- 상위 클래스의 변수를 참조할 때 super 사용
- super()는 상위 클래스의 생성자를 호출
- 생성자 첫 줄에는 this()나 super()가 첫 줄에 존재해야 한다
클래스의 정점, Object 클래스
- Object 클래스가 최상의 클래스
- 상속받지 않아도 자동적으로 Object 클래스 extends
- Object 클래스 멤버 자동 상속
- Object 클래스 메서드
- 기본적으로 사용 가능
- toString(), equals(), hashCode(), wait(), notify()
- 기본적으로 사용 가능
1. 캡슐화(Encapsulation)
개요
- 학습 목표
- 캡슐화 개념과 목적 이해
- 패키지 개념과 import문 사용 방법
- 캡슐화를 위한 접근제어자 4가지
- 데이터 보호를 위한 getter/setter 메서드
캡슐화
- 캡슐화
- 특정 객체 안에 속성과 기능을 캡슐로 만들어 데이터 보호
- 목적
- 데이터 보호(정보은닉)
- 데이터의 불필요한 외부 노출 예방
패키지
- 패키지
- 특정 목적을 위해 클래스나 인터페이스를 묶은 것
- 효과적으로 관리
- 대표적인 패키지
- java.lang : 기본 패키지
- java.util : 확장 클래스
- java.io/java.nio : 입출력
- 선언 방식
- package practicepack.test;
- 클래스 충동 방지
- 같은 클래스명을 사용해도 다른 패키지이면 가능
Import문
- import문
- 다른 패키지 내의 클래스를 사용하기 위해 사용
- 선언 방식
- package문과 class문 사이에 작성
- import 패키지명. 클래스명; or import 패키지명.*;
- 장점
- 다른 패키지의 클래스를 사용할 때 전체 패키지 이름을 적지 않아도 된다
- ex) package.test.Example → Example
접근제어자
- 제어자(modifier)
- 접근 제어자 : public, protected, (default), private
- 기타 제어자 : static, final, abstract, native, transient, synchronized
- 하나의 대상에 여러 제어자 사용 가능
- 접근 제어자는 한 번만 사용 가능
- 접근 제어자(Access modifier)
- 외부로부터 데이터 변경을 방지
- private : 동일 클래스 내 접근
- default : 동일 패키지 내 접근
- protected : 동일 패키지 + 외부 하위 클래스 접근
- public : 접근 제한 없음
getter와 setter 메서드
- private으로 제어된 필드 값을 다른 클래스에서 접근할 때
- getter : 값을 불러오기 (메서드명 : get-)
- setter : 값을 저장 (메서드명 : set-)
2. 다형성(polymorphism)
개요
- 학습 목표
- 다형성의 의미, 장점
- 참조 변수의 타입 변환(업 캐스팅, 다운 캐스팅)
- instanceof 연산자
- 다형성 활용
다형성
- 다형성
- 하나의 객체가 다양한 형태의 성질을 가질 수 있는 것
- overloading, overriding 모두 다형성의 예
- 상위 클래스 = new 하위 클래스
- 하위 클래스의 멤버 수가 더 많아서 사용할 수 있는 기능이 줄어들지만 가능
- 역으로는 불가능하다(실제로 구현이 안되는 기능도 있기 때문)
참조 변수의 타입 변환
- 참조 변수의 타입 변환
- 사용할 수 있는 맴버 개수 조정
- 타입 변환 조건
- 상속 관계에 있는 경우만 가능
- 하위에서 상위로 업 캐스팅은 형 변환 연산자()를 생략 가능
- 상위에서 하위로 다운 캐스팅 형 변환 연산자 필수
instanceof 연산자
- instanceof
- 참조 변수 캐스팅이 가능한지 여부를 boolean으로 반환
- 사용 방법
- 참조 변수 instanceof 타입
- 캐스팅 가능하면 true, 아니면 false
- 참조 변수가 null이면 false
3. 추상화(Abstraction)
개요
- 학습 목표
- 추상화 개념과 목적
- abstrct 제어자 의미
- 추상 클래스 개념, 문법
- final 키워드
- 추상화 역할을 하는 interface
- 추상 클래스와 인터페이스 차이
추상화
- 추상화 개념과 목적
- 객체의 공통적 속성과 기능 추출
- 하위 클래스들의 공통적 특성을 모아 상위 클래스를 만든다
abstract 제어자
- abstract 사용
- abstract 메서드(추상 메서드), abstract class(추상 클래스)
- 하나의 메서드가 추상 메서드이면 그 클래스는 추상 클래스
- abstract 특징
- 추상 메서드는 시그니처만 있고 바디에 내용이 없다
- 객체 생성 불가
추상 클래스
- 사용 목적
- 새로운 클래스 생성에 용이
- 구체적인 내용은 하위 클래스에서 구현(오버 라이딩 사용)
- 상층부에 갈수록 공통된 속성이 많다
final 키워드
- final
- 선언 위치에 따른 효과
- 클래스 : 변경 불가능한 클래스, 상속 불가
- 메서드 : 오버라이딩 불가
- 변수 : 상수 취급(값 변경 불가)
인터페이스
- 인터페이스
- 추상 클래스 : 추상 메서드 하나 이상 포함
- 인터페이스 : 추상 메서드와 상수만 멤버로 갖는다
- 인터페이스 기본 구조
- class 대신 interface 키워드를 사용
- 내부 모든 필드가 public static final
- 내부의 모든 메서드가 public abstract
- 생략 가능
- 인터페이스 구현
- extends 대신 implements 사용
- 인터페이스 내 모든 추상 메서드를 구현 필수
- 인터페이스 다중 구현
- 하나의 클래스가 다중의 인터페이스 구현 가능
- class 클래스 이름 implements 인터페이스1, 인터페이스2, 인터페이스3{…}
- 클래스는 동일한 필드나 이름으로 충돌이 가능하여 다중 상속이 불가
- 인터페이스는 미완성된 메서드로 충돌이 일어날 여지가 없기 때문에 가능
- 상속과 인터페이스 구현 동시에 가능
- 인터페이스 장점
- 기능을 가지는 역할과 구현을 분리시켜 코드 변경을 용이하게 함
- 개발 시간 단축
- 다른 클래스에 미치는 영향을 최소화
'Backend boot camp > Session1' 카테고리의 다른 글
[JAVA] 심화(Effective) (0) | 2022.09.14 |
---|---|
[JAVA] 컬렉션(Collection) (0) | 2022.09.06 |
[JAVA] 객체 지향 프로그래밍 기초 (0) | 2022.09.06 |
[JAVA] 기초 - 배열 (0) | 2022.09.06 |
[JAVA]기초 - 변수, 타입, 문자열, 연산자, 콘솔 입출력 (0) | 2022.09.06 |