👉 클래스변수 : static value (클래스가 있을동안 사용되는 변수)
👉 인스턴스변수 : 인스턴스가 남아있는동안 사용되는 변수
👉 지역변수 : 함수나 메소드 안에서만 사용되는 변수

-> public Demo(String s1, String s2) 생성자를 통해서 인스턴스 변수들이 초기화 되는 모습이다.

👉 toString의 기초부터 설명하자면, toString 이라는 메소드는 객체(주소)를 실제 값으로 출력할 수 있는 메소드이다. 위에 예제에서 toString을 이용하여 d값을 출력하게 되면 s1→ “nice”, s2→”rice” 과 같은 값을 출력할 수 있다.
👉 toString에 override의 개념이 추가 되는 이유는 기본적으로 모든 메소드의 조상인 object클래스 내에 toString의 메소드가 존재하는데, 이 러한 상위 클래스의 메소드를 가져와 내가 원하는 방식으로 toString의 모습을 변경하기 위해 override를 사용하는것이다.
👉 메서드를 호출할때는 어떤 관계가 있을까?
🌳 caller : 호출을 하는사람
🌳 callee : 호출을 받는사람
private의 역할은 정보보호가 아니고, 필터역할이다.
caller와 callee의 패키지 및 클래스가 동일한지 확인하는것인데, 접근제어자에서 필터링이라는 말은
패키지+클래스명의 일치를 파악하는것.
예를들어 org.example.quiz.QuizVO가 다 같아야 priavte 사용가능하다.
private int balance;
public int getBalance() {
return balance;
}
👆 해당코드에서는 실제로 int데이터아입인 미지의 변수안에 balance값이 들어가는것 이므로
int□ = balance; 와 같은 개념이다.
고로 getter를 했을 때 가져가는것은 balance가 아니고 balance를 복제한 변수를 가져가는것이다.
a. 내부에서 초기화하는 방법
Scanner sc;
public BMIUI( ){
sc = new Scanner(System.in);
}
👆 매개변수를 사용하지 않고 간편하게 생성자를 생성하므로 간편하지만
System.in과 연결되어 있어 객체를 사용할 때마다 생성해야 하므로 비효율적
b. 생성자를 통한 의존성 주입
priavte Scanner scanner;
public BMIUI(Scanner scanner){
this.scanner = scanner