자바는 클래스안에 수많은 데이터를 담아두는데 변수를 마음대로 바꿔놓으면 곤란해진다. 접근 지정자는 publiic, private, protected, default가 있다.
1 public: 아무나 사용가능
2 protected: 가족중심인데 같은 패키지, 자식클래스(상속)이며 허용
3 default: 같은 패키지, 클래스에서만 가능
4 private: 오직 해당 클래스만!!!
이 두개의 메서드를 사용하면 데이터 값을 수정하거나 꺼내올수 있다!!!
get의 뜻은 얻다 이고 객체의 private 필드값을 외부로 반환한다. setter는 필드 값을 변경, 저장한다.
//Getter: get(변수명), setter: set(변수명)]
public class Bank {
private String sort;
private int accountSecretNumber;
// Getter
public String getSort() {
return sort;
}
// Setter (this.필드 = 매개변수)
public void setSort(String sort) {
this.sort = sort;
}
// 비밀번호 Getter
public int getAccountSecretNumber() {
return accountSecretNumber;
}
// 비밀번호 Setter
public void setAccountSecretNumber(int accountSecretNumber) {
this.accountSecretNumber = accountSecretNumber;
}
}
setter는 저장하고 나가는 느낌인데 void는 돌려줄거 없어라는 뜻이므로 꼭 사용해줘야한다.
객체가 생성할때 초기화를 시키는것이 생성자다.
public class Bank {
int date;
// 생성자: 클래스명과 동일하게 작성 (반환형 없음)
public Bank() {
date = 12;
}
}
public class BankTest {
public static void main(String args[]) {
// 객체 생성 시 생성자가 자동으로 호출됨!
Bank obj1 = new Bank();
Bank obj2 = new Bank();
System.out.println("A의 계좌 생성날은 " + obj1.date); // A의 계좌 생성날은 12
System.out.println("B의 계좌 생성날은 " + obj2.date); // B의 계좌 생성날은 12
}
}
외부에서 전달되는 값은 매개변수에 저장된다.
class Student {
String name;
int grade;
// 생성자가 매개변수(n, a)를 가짐
Student(String n, int a) {
name = n; // 진짜 내 변수 name에 들어온 재료 n을 대입
grade = a;
}
}
public class MidtermTest {
public static void main(String[] args) {
// 객체를 만들 때 생성자가 매개변수를 가져감 (문자열 리터럴은 큰따옴표 필수)
Student test = new Student("timo", 1);
System.out.println("이름: " + test.name); // 이름: timo
System.out.println("학년: " + test.grade); // 학년: 1
}
}
메소드 오버로딩처럼 생산자가 여러개 있는것을 말한다. 단 매개변수는 다르게!!!!
public class Student {
String name;
int age;
// 1번 생성자: 아무 재료도 없을 때
Student() {
name = "해리 포터";
age = 20;
}
// 2번 생성자: 이름만 던져줄 때
Student(String n) {
name = n;
age = 20; // 나이는 기본값 세팅
}
// 3번 생성자: 이름과 나이를 둘 다 던져줄 때
Student(String n, int a) {
name = n;
age = a;
}
}
public class OverloadingTest {
public static void main(String[] args) {
// 활용하면 각각 맞는 생성자가 알아서 호출된다!
Student s1 = new Student(); // 1번 호출 -> 해리 포터, 20
Student s2 = new Student("스네이프"); // 2번 호출 -> 스네이프, 20
Student s3 = new Student("덤블도어", 150); // 3번 호출 -> 덤블도어, 150
}
}
매개변수의 이름과 필드의 이름이 같을때 사용한다. this.를 붙이면 필드가 된다.
class Student {
String name; //필드
Student(String name) { //매개변수, student 생산자가 문자열 하나를 받는다
name = name; }
생산자 안에서 name = name이 된다. 매개변수끼리만 왔다갔다하고 끝나서 name이라는 객체는 비어있다.
class Student {
String name;
Student(String name) {
this.name = name; //객체가 가지고 있는 이름, name은 생산자에 들어온 값
}
}
예를 들어 반에 A에게 저쪽 A에게(동명이인) 책을 가져다주라 하면 헷갈려서 구분하는거다.