객체
- 상태와 행동으로 구분될 수 있는 모든 것들은 객체가 될 수 있다.
- 객체를 생성하기 위해서 class 필요
- 하나의 class로 여러 개의 객체를 생성
- 객체 생성을 위한 class는 생성하고자 하는 객체의 모양과 같아야 한다
==> 생성하고자 하는 객체가 무엇인지부터 구체적으로 모델링 해야함
==> 생성하고자 하는 객체들의 공통된 데이터 구조와 기능을 추출해서 class 생성
- 같은 class를 통해 생성된 여러 개의 객체는 형태는 같지만 서로 다른 객체이다
- 객체는 만들고 싶은 만큼 만들 수 있다
객체 생성을 위한 class
- 메소드와 변수(=멤버메소드와 멤버변수)는 객체를 생성해야만 사용할 수 있다.
==> 멤버메소드와 멤버변수 자체만으로는 메모리를 할당받지 않은 상태이기 때문
- 객체 생성: 객체=new 클래스이름
==> 인스턴스화(객체를 생성하는 다른말). 객체에 저장되는 것은 주소값
==> 생성된 객체들은 서로 다른 독립된 메모리를 할당 받음 = 저장된 주소값이 다름.
즉, class 내의 정의된 변수에 객체마다 다른 값을 저장하는 것이 가능하다
==> 객체 생성 후, class 내의 변수나 메소드에 접근하려면,
객체.변수 / 객체.메소드 ------객체가 주소값을 갖고 있기 때문
객체에 언제든지 접근가능
- 객체의 데이터 타입= class 타입(레퍼런스 타입)
생성자
- 생성자의 역할
객체를 초기화 함(변수), 멤버변수 초기화
- class 이름과 같아야 함 (메소드처럼 선언)
ex)
class GoodsStock {
String goodsCode;
int stockNum;
GoodsStock(String code, int num) {
goodsCode = code;
stockNum = num;
}
- 디폴트 생성자 : 생성자를 선언하지 않으면 JVM이 자동으로 생성. 파라미터를 받지 않고, 내용이 없음.
=> 생성자를 따로 선언하면 디폴트 생성자가 자동으로 선언되지 않음. (수동으로 디폴트 생성자 선언하는 습관 필요)
(.을 통해서)
- 생성자를 통하면 여러개의 객체를 초기화하는데 중복되는 코드를 줄여줄수 있음.
생성자와 메소드의 차이
- 생성자는 리턴형을 사용하지않는다
- 생성자는 class 이름과 같다
- 생성자에서 파라미터는 초기화하고자 하는 만큼
- 생성자의 타입 (파라미터) 에 없는 객체는 생성할 수 없음
ex. 생성자가 3개면 객체를 3개 만들수있다.
소스코드
1. 객체 생성 기본
1-1. 객체 class (생성자, 디폴트 생성자 포함)
package oop;
public class Account {
//공통된 데이터구조
//[계좌번호, 계좌주, 잔액] = 상태 =멤버변수
String accountNum;
String ownerName;
int balance;
public Account(String accountNum, String ownerName, int balance) {
this.accountNum = accountNum; // 멤버변수와 로컬변수가 같을 때,
this.ownerName = ownerName; // 'this.변수'를 쓰면 멤버변수를 지칭
this.balance = balance;
}
public Account() {
} // 디폴트 생성자
//공통된 기능 = 행동 = 멤버메소드
//입금하다, 인출하다
public void deposit(int amount) {
balance += amount;
}
public int withdraw(int amount) throws Exception {
if (balance < amount) {
throw new Exception("잔액 부족");
}
balance -= amount;
return amount;
}
@Override
public String toString() {
return "Account [accountNum=" + accountNum + ", ownerName=" + ownerName + ", balance=" + balance + "]";
}
}
1-2. 객체 생성(메인 메소드 포함한 class)
package oop;
public class AccountMain {
public static void main(String[] args) {
Account account1 = new Account();
account1.accountNum = "11111-11111";
account1.ownerName = "홍길동";
account1.balance = 10000;
account1.deposit(5000);
/*
* System.out.println("계좌번호: " + account1.accountNum);
*
* System.out.println("예금주: " + account1.ownerName);
*
* System.out.println("잔액: " + account1.balance);
*/
System.out.println(account1);
try {
account1.withdraw(20000);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
'개발 > JAVA' 카테고리의 다른 글
[JAVA] 상속에 대해 (0) | 2019.01.21 |
---|---|
[JAVA] 메소드 오버로딩, 메소드 오버라이딩 (0) | 2019.01.16 |
[JAVA] 접근제어자 (0) | 2019.01.13 |
[JAVA] 선택정렬, 버블정렬 (0) | 2019.01.11 |
[JAVA] 배열, 2차원배열 n명의 학생 점수 총점 평균 구하기, 배열 이용해 학생 점수 구하기 (0) | 2019.01.10 |
댓글