[캡슐화]
: 외부에서 건들 수 없도록 함.
■ 객체 외부인 메인에서 객체 내부에 너무 쉽게 접근할 수 없도록 직접 접근을 막는다.
-> 클래스에서 멤버변수의 접근제한자를 public에서 private로 바꾸면 에러 발생! 객체 정보에 접근할 수 없게 된다 .
==> "하이딩(정보은닉)"
■ "접근자", "접근제한자"
---> 크게 보면 private(전부 가리기), public(전부 공개)
■ main은 반드시 public이 원칙.
■ "getter" : 캡슐화된 (=정보가 은닉된, 정보가 하이딩된) 멤버변수의 값을 가져오고 싶을 때 사용
1) getter는 가져올 수 있는 메서드이기 때문에 반드시 public으로 선언
2) getXXX - (get멤버변수명) 으로 이름 작성.
3) 리턴값 o
■ "setter" :캡슐화된 멤버변수에게 새로운 값을 부여하고 싶을 때 사용
1) 역시나 public으로 선언.
2) 리턴값 x (setter는 반환형이 void로 고정)
public void SetScore(int score) {
this.score =score;
}
■ 생성자는 멤버변수를 초기화하는 것. setter도 멤버변수에 값을 부여하는 것. 둘이 비슷함
■ 메서드를 호출하면 로그에 다 흔적이 남는데, 멤버접근연산자(get/set)는 흔적이 안남는다.
로그가 남는 메서드를 쓰는 것이 더 안정적
■ 우클릭 -> source -> generate -> getter/setter (사용이 잦은 메소드들을 자바가 구현해놓았다.)
■ private를 걸어두면 자동생성에 빨간색으로 뜸!! -> 같은 클래스 안에서는 사용이 가능하다.
[상속]
class Dog extends Animal
예를 들어, animal 클래스에는 dog 클래스, cat 클래스가 포함될 수 있다.
상위 클래스를 만들어 하위 클래스에서 가져다 쓸 수 있도록 한다.
■ 상위 클래스 == 부모 클래스
■ 하위 클래스 == 자식 클래스 == 파생 클래스
■ 상속은 하나밖에 못받음. 자바는 다중상속 안됨 -> 인터페이스 써도 안됨!!
■ private 접근제한자를 붙이면 자식도 못쓴다. ==> 자식까지 쓰게 하려면 protected를 사용할 수 있다.
-> 근데 실무에서는 protected를 사용하지 않는다.
■ 부모 클래스에서 생성자를 만들면 자식 클래스의 기본 생성자에 에러가 발생한다.
■ "자식 클래스의 모든 생성자는 무조건! 가장 먼저! 부모의 기본 생성자를 호출함" ★★★★
■ 부모클래스에게 기본 생성자가 없다면 자식 클래스에서는 에러가 발생함!! ★★
-> 해결 방법
1) 부모 클래스에게 기본 생성자를 선언
2) 자식 클래스의 생성자에서 부모 클래스가 가지고 있는 다른 생성자를(인자가 있는) 호출하면 된다.
---> 2번으로 해결하는 것이 좋음! 부모의 다른 생성자를 불러서 해결!
생성자 이슈가 상속에서 가장 중요한 이슈다!★★★★★★★★★★
■ this() -> 자기자신 객체
■ super() -> 부모 호출
class Point {
int x;
int y;
Point(int x, int y) {
// 부모에 생성자 추가하면 자식에게 에러 발생 -> 기본 생성자 때문에 생기는 에러
this.x = x;
this.y = y;
}
}
class ColorPoint extends Point{
String color; // 이미 개발된 Point를 가져오면 x,y 생성 필요 없음
ColorPoint() { // 기본 생성자. 에러의 원인
// -> 부모의 기본 생성자를 호출해야하는데 부모의 기본 생성자가 없기 떄문이다.
}
}
■ 생성자는 인자가 더 많은 쪽을 구현한 후 다른 쪽에서 가져다가 사용 this();
■ 클래스 변수(static)에는 = 로 값 초기화해줘도 ok
[오버라이딩]
: 부모 클래스가 가진 메서드를 자식 클래스의 특성에 맞게 재정의하는 것
== "메서드 재정의" == 오버라이딩 : 메서드 시그니쳐가 동일해야 하며, 상속관계에서만 발생한다!!!!!
Source -> override method 들어가서 오버라이딩 가능
■ @Override : 어노테이션. 컴퓨터와 개발자에게 가독성을 증가시켜주는 기호
-> 부모가 가지고 있구나 ~ 하고 쉽게 알 수 ㅇ
■ 오버로딩과 오버라이딩 구분!!! 매개변수가 다르면 오버라이딩이 될 수가 없다. 메서드 시그니쳐가 완전히 동일해야 오버라이딩.
===> private 접근제어자 getter setter 캡슐화 상속 생성자 오버라이딩 super
static 객체와 무관하게
final 상수화
[Object 클래스] == 자바의 최상위 클래스
■ 자바에서 선언 및 생성하는 모든 클래스는 Object를 상속받는다.
■ toString(), equals() 많이 사용
■ toString()이 자동호출 된다. -> 해쉬값(주소값)을 보여줌
■ 최상위 클래스 object의 toString()을 오버라이딩할수도 있다. (해쉬값 보기 싫으니까)
■ Source -> generate toString() 존재
■ toString()있으면 println말고 toString으로 사용
■ 커스터마이징 할 거 아니면 보통 source -> generate toString()으로 생성한다.
멤버변수 => 생성자 => 메서드 => get/set => toString 순서
[해야할 것]
1) 코드 작성하면서 DEPTH 줄이기!!!!!!!! & 어떤게 더 효율적인 방법일지 고민
2) 가독성을 위해 this 빼먹지 않고 전부 다 쓰기!!!
오늘은 자바에서 굉장히 중요한 개념들을 배웠다. 자바의 핵심인 객체와 상속은 꼭!! 잘 숙지하고 넘어가도록 해야겠다.
'IT > JAVA' 카테고리의 다른 글
[JAVA] 객체배열 - 포켓몬 프로그램 (0) | 2025.01.16 |
---|---|
Java Section 08 : 메서드 (0) | 2025.01.15 |
Java Section 07 : 클래스 (0) | 2025.01.14 |
[Day 10] 객체와 생성자 (0) | 2025.01.13 |
[Day 9] JAVA 객체 (0) | 2025.01.10 |