[Java] 객체지향 [{클래스, 인스턴스}, {접근제어자,get,set}, {오버로딩, 오버라이딩}]
공통적으로 갖는 특성을 묶어서 분류하는 것이 객체 지향의 핵심
설계 = 클래스 = 부모 클래스
결과물 = 인스턴스 = 상속받은 자식 클래스
정적인 정보는 멤버 변수 (이름, 나이 등)
동적인 기능은 메소드 (액션)
# 클래스 정의
public class BankAccount {
// 멤버변수
int bankCode;
int accountNo;
String owner;
int balance;
boolean isDormant;
int password;
// 메소드
void inquiry(){}
void deposit(){}
void withdraw(){}
void heldDormant(){}
// 생성자:
// 1)클래스 내부에 정의
// 2)생성자 메서드명은 클래스명과 일치해야한다.
// 3)new 연산자로 인스턴스 생성
// 4)this 는 생성자 자신을 뜻함
BankAccount(
int bankCode,
int accountNo,
String owner,
int balance,
int password,
boolean isDormant
){
//
this.bankCode = bankCode;
this.accountNo = accountNo;
this.balance = balance;
this.owner = owner;
this.password = password;
this.isDormant = isDormant;
}
}
# 인스턴스 생성
클래스의 정의를 기반으로 메모리에 실제로 생성된 개별 객체를 말합니다. 예를 들어, BankAccount 클래스로부터 생성한 객체를 BankAccount 클래스의 인스턴스라고 할 수 있습니다.
public class test {
public static void main(String[] args) {
BankAccount account = new BankAccount(1,2,"3",4,5,true);
System.out.println(account); // 주소값
System.out.println(account.accountNo); // 2
}
}
# 상속
상속(inheritance): 하나의 클래스가 다른 클래스로부터 속성과 동작을 물려받는 것을 의미합니다. 부모 클래스로부터 상속을 받은 클래스는 부모 클래스의 멤버 변수와 메소드를 물려받아 사용할 수 있습니다.
* 자바는 단일상속 언어 (하나의 클래스만 상속받을 수 있음)
# 오버로딩
- 아예 새로운 메서드 정의
- 부모 클래스에서 받은 메서드의 파라미터를 자식클래스에 맞게 변경하는 행위
- 파라미터의 타입, 개수 등을 변경
- 리턴 타입도 바뀌어도 됨
e.g. 부모 놀이기구 클래스의 입장 메소드의 파라미터는 동그란 티켓인데 자식 회전목마 클래스의 입장 메소드의 파라미터는 네모난 티켓과 현금 1,000원을 더 내야한다.
# 오버라이딩
- 상속받은 메서드의 동작 방법만 변경
- 상속받은 메서드의 파라미터 그대로 사용 (타입, 개수 등 그대로)
- 리턴 타입도 그대로
e.g. 부모 놀이기구 클래스는 파라미터로 동그란 티겟이 필요하고 티켓을 내면 5분간 태워주는데 자식 바이킹 클래스 또한 동그란 티겟이 필요하지면 티켓을 내면 1분만 태워준다.
# 접근제어자 private, public
- 보통 멤버변수는 클래스 외부에서 수정하지 못하도록 private 설정
* 읽거나 수정하려면 getter, setter 함수를 통해서
- 메서드에는 public 설정
// private 멤버변수에는 외부에서 수정하지 못하도록 private 설정
private int bankCode;
private int accountNo;
private String owner;
private int balance;
private boolean isDormant;
private int password;
// 메소드
public void inquiry(){}
public void deposit(){}
public void withdraw(){}
public void heldDormant(){}
접근을 제어하는 이유는, 의도치 않은 실수 예방과 정보 은닉
# 접근제어자 getter, setter 함수
* 클래스 내부에 선언
* 마우스 우클릭 => Generate 를 통해 쉽게 생성 가능
// getter, setter
// get 값을 불러옴
// set 값을 변경
public int getPassword() {
return password;
}
public void setPassword(int password) {
this.password = password;
}
# 상속받은 인스턴스에서 password 수정, 읽기
public class test {
public static void main(String[] args) {
BankAccount account = new BankAccount(1,2,"3",4,5,true);
// private 멤버변수의 값을 setter 함수를 통해 변경
account.setPassword(12345);
// 변경했으니 getter 함수로 변경된 값을 가져와야 함
// System.out.println(account.passowrd); // 이건 기존 값을 가져오려해서 오류
System.out.println(account.getPassword()); // 12345
}
}