인스턴스 (instance)
- 클래스는 객체의 속성을 정의하고, 기능을 구현하여 만들어 놓은 상태
- 실제 클래스를 기반으로 생성된 객체(인스턴스)는 각각 다른 멤버 변수 값을 가지게 됨.
- new 키워드를 사용하여 인스턴스 생성
💡 main 파일에서 클레스 불러오는 방법
클레스타입 변수명 (인스턴스 변수 선언) = new 객체 생성 (인스턴트화);
Account account; // 참조변수
account = new Account(); // 인스턴스 생성
System.out.println(account); // 참조값
- 인스턴스 변수 선언 : 객체를 담기 위한 변수 객체 생성;
- 인스턴스화 : 별도의 변수, 메서드에 대한 메모리(힙 메모리) 할당/ 임의의 주소 값을 가진다.
힙 메모리(heap memory)
- 생성된 인스턴스는 동적 메모리(heap memory) 에 할당됨
- 자바에서 Gabage Collector 가 주기 적으로 사용하지 않늠 메모리를 수거
- 하나의 클래스로 부터 여러개의 인스턴스가 생성되고 각각 다른 메모리 주소를 가지게 됨
용어 정리
객체 : 객체 지향 프로그램의 대상, 생성된 인스턴스
클래스 : 객체를 프로그래밍 하기위해 코드로 정의해 놓은 상태
인스턴스 : new 키워드를 사용하여 클래스를 메모리에 생성한 상태
멤버 변수 : 클래스의 속성, 특성
메서드 : 멤버 변수를 이용하여 클래스의 기능을 구현한 함수
참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수
참조 값 : 생성된 인스턴스의 메모리 주소 값
생성자
- 생성자는 반환 값이 없고, 클래스의 이름과 동일
- 클래스에는 반드시 하나 이상의 생성자가 존재, 클래스에 생성자를 구현하지 않아도 new 키워드와 함께 생성자를 호출 할 수 있음.(default 생성자)
- 생성자는 객체 생성에 대한 가이드 역할.
- 생성자의 목적, 객체(필드)를 초기화 역할
- 객체를 생성할때 파라미터 값을 전달할 수 있다.
- 대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private 으로 선언되는 경우도 있음
- 객체를 생성할 때 new 키워드와 함께 사용 (ex) new Student();
※ 디폴트 생성자를 생성해두지 않고 사용했을경우,
오버로딩 된 (매개값이 다른) 생성자를 추가되면 디폴트 생성자로 생성한 인스턴스는 오류가 생길 수 있다.
💡 생성자 구현
클레스 파일
public class Account{
String accountNo;
String ownerName;
int balance; //잔액
public Account() {} //디폴트 생성자 필요. 무조건
// 메인에서 문제 생길 수 있음. ==>메인 해당 클레스 파일에 생성자가 아무것도 없으면 , 자동으로 가상의 디폴트 생성자를 생성.
public Account(String accountNo,String ownerName, int balance) { // 이름은 같게 해줌 => 하지만 지역변수
//this는 자기자신의 객체 필드 변수를 지칭
this.accountNo = accountNo; // 필드 값을 파라미터로 넘어오는 값으로 초기화
this.ownerName = ownerName; // 필드 값을 파라미터로 넘어오는 값으로 초기화
this.balance = balance; // 필드 값을 파라미터로 넘어오는 값으로 초기화
}
}
🍫 생성자 오버로딩이 가능하다. >> 오버로딩이란?
[coding/javaProgram] - [ JAVA ] 오버로딩(Overloading)과 오버라이딩(Overriding)
메인파일
Account account;
account = new Account("111-111", "홍길동", 100);
Account account2;
account2 = new Account("222-222", "박길동", 5000);
메인파일 (생성자 파일 생성전에 복잡한 구조)
Account account; //인스턴스 변수 (객체를 담기 위한 변수)
account = new Account();
account.accountNo = "111-111";
account.ownerName = "홍길동";
account.balance = 10000;
'BackEnd > JavaProgram' 카테고리의 다른 글
[ JAVA ] 참조 자료형 정의 및 사용해보기 (0) | 2023.01.30 |
---|---|
[ JAVA ] 오버로딩(Overloading)과 오버라이딩(Overriding) (1) | 2023.01.30 |
[ JAVA ] 객체 지향 프로그래밍이란 ? 클래스 / 메서드 (0) | 2023.01.29 |
[자바기초 문법] 반복문 While / For (0) | 2022.12.24 |
[자바기초 문법] 연산자와 조건문 If / Switch (0) | 2022.12.24 |