객체지향
객체지향 3대원칙
- 캡슐화
- 캡슐화 원칙 1,2
private사용하여 클래스
- 상속
- 상속의 목적, 장덤
같은애들을 묶어서 필요한 애들만 추가하면 되게 만들
추가만하면 모든 상속되는 클래스에 전달이 된다
유지보수에 용이
클래스의 구조를 만듦
- 다형성
필드
변수 선언 위치에 따라 구분
1. 클래스 변수 : 클래스 영역에 static키워드를 가짐
2. 멤버변수(인스턴트변수): 클래스영역에 선언 - 전역변수
3. 지역변수 : 클래스 영역이 아닌 메서드 생성자 초기화 블럭 내부에서 선언
캡슐화
private을 사용하여 외부에서 클래스 내부의 데이터에 접근하지 못하도록 막는것
메소드
오버로딩
한 클래스 내에서 파라미터 선언부가 다르고, 이름이 같은 메서드를 여러개 정의하는것
조건2가지
1. 메소드 이름이 같아야한다.
2. 매개변수 선언부가 달라야한다.
- 매개변수 타입 개수 순서
calcNumPrint() 괄호안에 암것도 안넣으면 매개변수 없는 메소드 출력 숫자를 넣으면 int 매개변수 있는 메소드 출력
System.out.println('a');
System.out.println(2);
System.out.println("hi");
System.out.println(true);
println(int num){
오버로딩을 통해서 같은 메소드명으로 실행 가능하게해줌
메소드 명은 똑같으되 매개변수만 다르면 실행하게 해주겠다
메소드 호출
.메소드명(소괄호);
getter/setter
this
모든 인스턴트 메소드에 숨겨진채 존재하는 지역변수로, 해당 객체의 주소값을 담고 있다.
this(메소드)는 생성자다
같은 클래스의 다른 생성자를 호출할때 사용
생성자
객체를 생성할떄 항상 실행되는것, 메소드 중에서 맨 처음 실행되는 메소드
객체의 초기화란 클래스가 객체를 생성/호출하였을때 객체의 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 하는것으로 일련의 준비단계
- 생성자 규칙
클래스에슨 반드시 생성자가 존재해야한다.
인스턴트 생성시 딱 한번 호출된다.
클래스 이름과 동일한 이름을 가진 메소드이다.
반환형 존재하지않는다. return이 없다.
- 생성자의 역할은 무엇인가?
객체를 생성하고 객체를 초기화함
- 생성자의 특징은 무엇인가?
클래스명과 같은 메소드이고 반환형이 없습니다.
- 생성자 종류
기본생성자 (매개변수없는 생성자)
매개변수 있는 생성자
ex) Scanner sc = new Scanner(System.in);
상속
상속 - 상속의 특징
부모클래스의 생성자 상속 안됨, 하지만 자동으로 호출함.
- 자식클래스 객체 생성시, 부모클래스 생성자가 먼저 실행
- 자식클래스 생성자 안에서 부모클래스 생성자 호출을 명시하고 싶으면
super()활용
부모의 private 멤버는 상속은 되지만 직접접근불가
- 자식 객체 생성시에 부모의 필드값도 전달받은 경우, 자식 생성자 안에서
부모의 private 필드에 직접접근해서 대입 못함.
- super()이용하여 전달받은 부모 필드값을 부모생성자 쪽으로 넘겨서 생성
- setter, getter 매소드를 이용한 접근
모든 클래스는 Object 클래스의 후손
- Object클래스가 제공하는 메소드를 오버라이딩해서 메소드 재구현 가능.
예시) java.lang.String 클래스의 equals()과 toString()
오버라이딩
- 이름 매개변수개수 타입 리턴타입이 모두 동일해야한다
private는 사용 불가능
오버로딩은 이름만 같아도 됨