클래스의 필드 구현
public class CreditCard {
public long cardNumber; // 카드번호(16자리숫자)
public string cargOwner; // 카드주인
}
위의 코드는 신용카드를 추상화한 클래스 CreditCard를 구현했고, 신용카드 속성으로 카드번호 cardNumber와 소유자 cardOwner 등이 있다.
종류 | 키워드(예약어) | 기능 |
상수 | final | 수정될 수 없는 상수를 지정할 때 |
접근 지정자(한정자) | public(클래스 외부 접근 가능) protected(자기 클래스를 상속한 곳만) private(외부에서 접근 불가능) default(의미만있고, 쓰지는 않음) |
필드의 접근 권한의 종류를 지정할 때 |
정적 | static | 필드의 소속(클래스인지 인스턴스인지)을 지정할 때 |
필드의 기본 값
기본값은 선언 시 초기 값이 없으면 자동으로 저장되는 값으로 타입에 따라 기본이 되는 0이다.
구분 | 필드 | 기본값 |
불린형 | boolean | false |
문자형 | char | '\0' '\u000' |
정수형 | byte short int long |
0 |
실수형 | float double |
0.0f 0.0 |
참조형(클래스형) | String Date 등의 클래스 |
null |
객체 생성과 필드 참조 연산자
키워드 new
클래스 이름 변수 = new 클래스 이름();
Credit guestCard = new CreditCard();
- 객체를 생성하기 위해서 키워드 new 이후에 CreditCard()와 같이 생성자를 호출한다.
필드 참조 연산자.(닷,쩜)
변수.필드이름 = 값;
guestCard.cardNumber = 1234_5678_1234_5678L;
guestCard.cardOwner = "홍길동";
- 참조형 변수인 guestCard를 사용하며 필드 cardNumber와 cardOwner를 guestCard.cardOwner, guestCard.cardNumber 처럼 참조한다.
클래스의 메서드 구현
지정자 반환형 메서드이름(매개변수) {구현}
- 메서드 use() : 신용카드를 사용하는 메서드
- 메서드 payBill() : 매월 또는 수시로 카드 비용을 지불하는 메서드
- 메서드 addPoint() : 카드 사용실적에 따른 포인트 합산하는 메서드
public class 신용카드 {
private long 신용카드누적사용금액 = 0;
private long 누적포인트 = 0;
public void 신용카드사용(int 사용금액) {
신용카드누적사용금액 += 사용금액;
}
public void 신용카드사용비용지금(int 지급금액) {
신용카드누적사용금액 -= 지급금액;
포인트지급(지급금액);
}
public void 포인트지급(int 지급금액) {
누적포인트 += 지급금액 * 0.01;
}
}
public class CreditCard {
private long balance = 0;
private long point = 0;
public void use(int amount) {
balance += amount;
}
public void payBill(int amount) {
balance -= amount;
addPoint(amount);
}
public void addPoint(int amount) {
point += amount * 0.01;
}
}
메서드 지정자
종류 | 키워드(예약어) | 기능 |
메서드 재정의 제한 | final | 상속을 받은 자식클래스(하위클래스)에서 메서드를 더 이상 재정의(override)할 수 없도록 제한함 |
접근 지정자(한정자) | public(클래스 외부 접근 가능) protected(자기 클래스를 상속한 곳만) private(외부에서 접근 불가능) default(의미만있고, 쓰지는 않음) |
메서드의 접근 권한의 종류를 지정할 때 (필드와 동일함) |
정적 | static | 메서드의 소속(클래스인지 인스턴스인지)을 클래스로지정할 때 (필드와 동일함) |
추상 | abstract | 메서드를 추상 메서드로 지정할 때 |
동기 | synchronized | 멀티쓰레드에서 메서드 동기화를 지정할 때 |
클래스로부터 객체 생성
클래스의 생성자는 클래스명과 동일하다.
객체 생성은 아래와 같이한다.
신용카드 내신용카드 = new 신용카드();
신용카드 내다른신용카드 = new 신용카드();
클래스 신용카드의 객체에는 아래의 필드와 메서드가 생기고, 생성되면 메모리에 올라간다.
필드 | 메서드 | ||
cardNumber owner point balance |
0 null 0 0 |
use payBill addPoint |
public void use(int amount){} public void payBill(int amount){} private void addPoint(int amount){} |
객체의 필드와 메서드 참조(사용법)
참조연산자 . 와 참조 변수의 필드와 메서드를 사용한다.
public class CreditCardTest {
public static void main(String[] args) {
CreditCard myOtherCard = new CreditCard();
myOtherCard.owner = new String("홍길동");
myOtherCard.cardNumber = 1234_1234_1234_1234L;
myOtherCard.use(15_000);
myOtherCard.use(37_000);
myOtherCard.payBill(40_000);
}
}
필드 참조 메서드 getter와 setter 구현
Setter : 필드의 값을 저장하는 메서드
Getter : 필드의 값을 반환하는 메서드
키워드 this : 객체 자신을 의미하는 키워드
public class CreditCard {
private long cardNumber = 0;
public String owner = "";
private long balance = 0;
private long point = 0;
public void use(int amount) { balance += amount; }
public void payBill(int amount) {...}
private void addPoint(int amount) { point += amount * 10000; }
// getter
public long getCardNumber() {
return cardNumber;
}
// setter
public void setCardNumber(long cardNumber) {
if(cardNumber < 1000_0000_0000_0000L) {
System.out.println("카드번호가 정확하지 않습니다.");
return;
}
this.cardNumber = cardNumber;
}
}
'자바 JAVA > 자바 객체지향' 카테고리의 다른 글
자바 객체지향 : static과 final 배열 (0) | 2023.05.04 |
---|---|
자바 객체지향 : 생성자 (0) | 2023.05.04 |
자바 객체지향 프로그래밍이란? (0) | 2023.05.03 |
댓글