자바 JAVA/자바 객체지향

자바 클래스와 객체의 생성

땅콩아놀자 2023. 5. 8.

클래스의 필드 구현

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;
    }
}
반응형

댓글