TIL-20240425
2024-04-24
오늘의 학습 🌠
학습 내용 개념 정리 📃
- 멤버 = 필드 + 메서드
필드, 메서드는 선언하는 방법에 따라서 인스턴스 멤버와 클래스 멤버로 구분 가능
인스턴스 멤버는 객체 생성 후에 사용 가능, 클래스 멤버는 객체 생성 없이도 사용 가능
- 인스턴스 멤버
객체 생성해야 사용 가능
객체의 인스턴스 필드는 각각의 인스턴스 마다 고유하게 값을 가짐
- 클래스 멤버
- 클래스는 Java의 클래스 로더에 의해 메서드 영역에 저장되고 사용됨.
- 클래스 멤버 선언
- static 키워드 이용, 굳이 인스턴스화 시킬 필요 없음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package week03.sample;
public class Main {
public static void main(String[] args) {
Main main = new Main();
System.out.println(main.getNumber());
System.out.println(main.getNumber());
} public int getNumber(){
//지역변수 : 해당 메서드가 실행될 때마다 독립적인 값을 저장하고 관리
// 지역변수는 메서드 내부에서 정의될 때 생성됨
// 이 메서드가 종료될 때 소멸
int number = 1;
number+=1;
return number;
}
}
//전역변수(static)
지역변수는 해당 메서드가 실행될 때마다 독립적인 값을 저장하고 관리하고 메서드 내부에서 정의될 때 생성, 또한 이 메서드가 종료될 때 소멸함.
- final 필드와 상수
final 필드는 초기값이 저장되면 해당값을 프로그램이 실행되는 도중에는 절대로 수정 불가, final 필드는 반드시 초기값 지정 해야함.
상수는 불변의 값, 보통 static final로 씀
- 생성자
- 객체가 생성될 때 호출되며 객체를 초기화 하는 역할
- 모든 클래스는 반드시 생성자가 하나 이상 존재
- 오버로딩
- 똑같은 메서드 명을 사용하면서 매개변수의 종류에 따라 완벽하게 다른 기능 수행하게 하는 것
- this
이것, Java에서는 instance ‘자신’을 가리킴
생성자를 선언할 때 매개변수명과 객체의 필드명이 동일할 경우 오류가 발생하지는 않지만 생성자 블록 내부에서 해당 변수들은 객체의 필드가 아닌 가장 가까운 매개변수명을 가리키게 됨으로 자기 자신에게 값을 대입하는 상황이 발생
이럴 경우 this 키워드 사용하여 해결
this는 인스턴스 자신을 뜻하므로 객체의 메서드에서 리턴 타입이 인스턴스 자신의 클래스 타입이라면 this를 사용하여 인스턴스 자신의 주소를 반환할 수 있음
this() -> 생성자를 표현
1 2 3
class Car{ Car() { } }
여기서 Car가 this임.
- 접근 제어자
클래스, 변수, 메서드의 선언부에 부가적인 의미를 부여해줌
- 접근 제어자 : public, protected, default, private
그 외 제어자 : static, final, abstract
- public : 접근 제한이 전혀 없음
- protected : 같은 패키지 내에서, 다른 패키지의 자손 클래스에서 접근 가능
- default : 같은 패키지 내에서만 접근 가능
private : 같은 클래스 내에서만 접근 가능
- 클래스 : public, default
- 메서드 & 멤버변수 : public, protected, default, private
- 지역변수 : 없음
접근 제어자를 이용한 캡슐화(은닉성)
- Getter, Setter
- 직접적으로 값의 조회, 세팅을 방지하기 위해 Getter, Setter를 사용
- Getter
외부에서 객체의 private한 필드를 읽을 필요가 있을 때 Getter 메서드를 사용
- 메서드 이름 규칙 : get + 필드이름(첫 글자 대문자)
- GET은 변수값을 반환하는 목적이기 떄문에 return 이 필요
- Setter
- 외부에서 객체의 private한 필드를 저장/수정할 필요가 있을 때 Setter 메서드 사용
- SET은 변수 값을 할당하는 목적의 함수이기 때문에 인자를 받아야 됨.
- 상속
- 상속의 키워드는 extends
1
2
public class 자식클래스 extends 부모클래스{
}
상속의 개념을 확장의 개념으로 이해해야 함!
- 부모 클래스에 새로운 필드와 메서드가 추가되면 자식 클래스는 이를 상속받아 사용할 수 있음
- 자식 클래스에 새로운 필드와 메서드가 추가되어드 부모 클래스는 어떠한 영향도 받지 않음.
- 따라서 자식 클래스의 멤버 개수는 부모 클래스보다 항상 같거나 많음.
- 클래스간의 관계
- 상속관계 : is - a
- 예시 : 고래는 포유류다.
- 포함관계 : has - a
- 예시 : 자동차는 타이어를 가지고 있다. 자동차는 차문을 가지고 있다.
- 상속관계 : is - a
- Java는 기본적으로 다중 상속 허용 안 함
한 부모는 자식 class를 여러 개 가질 수 있지만 자식 class는 여러 부모 class를 가질 수 없음
- 이유 : 다중상속을 허용하면 클래스간의 관계가 복잡해짐
- overriding : 부모로부터 내려받은 메서드를 재정의해서 사용하는 기법
- 클래스에 final 키워드를 지정하여 선언하면 최종적인 클래스가 됨으로 더 이상 상속할 수 없는 클래스가 됨
Object 클래스는 Java 내 모든 클래스들의 최상위 부모 클래스
- 오버라이딩
부모클래스로부터 상속받은 메서드의 내용을 재정의 하는 것을 오버라이딩이라고 함.
- 선언부가 부모 클래스의 메서드와 일치해야 함
- 접근 제어자를 부모 클래스의 메서드보다 좁은 범위로 변경할 수 없음
- 예외는 부모 클래스의 메서드 보다 많이 선언할 수 없음
- super
추가 🕤
- 오늘은 집중이 안 돼서.. 여기서 마무리 하겠습니다.
🐱🏍— —🤸🏻♀️ ~~~ 야~호~