| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- Entity
- 게시판 만들기
- Algorism study
- GIT
- spring boot
- MVC 패턴
- #javaStudy
- 내일배움카드
- Java
- View
- MegabyteSchool
- MVC
- 게시판 리뷰 만들기
- side project
- 개발자취업부트캠프
- 클래스 상속
- 패스트캠퍼스
- 메가바이트스쿨
- Sts
- crud
- 국비지원교육
- tomcat
- #패스트캠퍼스 #국비지원교육 #메가바이트스쿨 #MegabyteSchool #개발자취업부트캠프 #내일배움카드
- 클래스 class
- Spring
- group study
- github
- Interface
- AWS
- array
- Today
- Total
tuter77
Java : Instance, Heap Memory, Constructor, Overloading 본문
● 인스턴스와 힙 메모리
▷ 인스턴스
- 클래스는 객체의 속성을 정의, 기능을 구현하여 만들어놓은 상태
- 실제 클래스 기반으로 생성된 객체(인스턴스)는 각각 다른 멤버 변수값들을 가지게 된다.(인스턴스들이 다른 힙메모리에 위치하기 때문이다.)
- new 키워드를 사용해서 인스턴스를 생성할 수 있다.
▷ 힙 메모리(Heap)
- 힙은 동적메모리로서 생성된 인스턴스가 이곳에 저장된다.
- c언어나 c++ 언어에서는 사용한 동적메모리를 프로그래머가 해제시켜야 한다.(free(), delete)
- 자바에서는 위와 달리 GC(Garbage Collector)가 주기적으로 사용하지 않는 메모리를 수거한다.
- 하나의 클래스로부터 여러개의 인스턴스가 생성되어 저장되고 각각 따른 메모리 주소를 갖게 된다.
*인스턴스가 저장된 주소는 system.out.print(인스턴스명) 으로 출력하면 나온다.
스택에 저장된 주소는 참조변수라고 하고 그 값은 참조값이라고 한다.(Reference Variable, Reference Value)
● 생성자(Constuctor)
- 생성자의 기본문법은 아래와 같다.
<class_name>([<argument_list]){[<statement]}
- 객체를 생성할 때 new키워드와 함께 사용한다. (new Student();)
- 생성자는 일반함수처럼 기능을 호출하지 않고 객체를 생성하기 위해, new와 함께 호출된다.
- 객체가 생성될 때 변수나 상수를 초기화하거나 다른 초기화 기능을 수행하는 메서드를 호출한다.
- 생성자는 반환값이 없고, 클래스의 이름과 동일하다.
- 대부분의 생성자는 외부에서 접근이 가능하지만, 필요에따라 private로 선언하기도 한다.
▷기본생성자(Default Constructor)
- 클래스에서는 반드시 적어도 하나 이상의 생성자가 존재한다.
- 클래스에 생성자를 구현하지 않아도, new키워드와 함께 생성자를 호출할 수 있다.
- 클래스에 생성자가 하나도 없는 경우 컴파일러가 생성자 코드를 자동으로 넣어준다.(예. public Student(){} -- 클래스명과 동일)
- 매개변수, 구현부가 없다.
이와 같은 생성자를 예시로 살펴보겠다.
아래는 Student클래스에서 선언된 속성들과 이를 구동하기위한 Test 클래스이다.
public class Student {
public int studentNumber;
public String studentName;
public int grade;
public Student() {} // 이 부분이 default 생성자에 해당한다.
public Student(int studentNumber, String studentName, int grade) {//매개변수로 정보를 생성해주는 경우
//studentNumber = studentNumber; //매개변수가 지역변수인 매개변수에 값을 대입하는 형태가됨. 이렇게 쓰면안된다. 하려는건 멤버변수에 대입하는것.
this.studentNumber = studentNumber;//매개변수와 이름이 같을때 this.을 사용해 멤버변수임을 선언할 수 있다.
this.studentName = studentName;
this.grade = grade;
}
public String showStudentInfo() {
return studentName + "학생의 학번은" + studentNumber + "이고, " + grade + "학년 입니다.";
}
}
아래는 테스트 클래스이다.
public class StudentTest {
public static void main(String[] args) {
Student studentLee = new Student();//(중요)default 생성자인데 생성자를 직접 만든 경우엔 제공되지않아서 class에 디폴트 생성자를 만들면된다.
studentLee.grade = 1;
System.out.println(studentLee.showStudentInfo());
Student studentKim = new Student(123456, "Kim", 3);//매개변수로 값을 입력.
System.out.println(studentKim.showStudentInfo());
}//정보를 주지않고 출력하면 String은 null값으로 초기화, Int는 0으로 초기화된다.
}
매개변수로 값을 입력하였지만, 저렇게 값을 입력하지 않고 그대로 출력하는 경우, String은 null값으로 int는 0으로 초기화되어 출력된다.
위 처럼 new Student()로 기본 생성자를 사용했는데 이 생성자를 그대로 사용하기 위해서 앞 클래스에 public Student() {}과 같이 선언해주어야 한다. 이 내용은 아래 생성자 오버로딩에 나온다.
▷생성자 오버로딩.
- 생성자를 구현해서 사용할 수 있다.
- 클래스에 생성자를 따로 구현하면 default constructor는 제공되지 않는다.
- 생성자를 호출하느 코드(client)에서 여러 생성자 중 필요에 따라 호출해서 사용할 수 있다.
오늘은 스택, 힙 메모리, 생성자에 대해서 배웠다. 중요한건 손에 언어가 익는 실습이라고 해서 실습으로 반복해서 클래스를 만들어보느라 시간이 많이 걸렸다.
이 클래스 만들기, 값을 저장해서 출력하기 등의 실습에서는 클래스 내에 멤버변수들을 어떻게 선언했는지 많이 헷갈렸고, 생성된 메소드를 this 매개변수를 사용해서 값을 입력할 지 아니면, 인스턴스에 일일히 값을 선언해주어할지 익히는게 시간이 걸렸다.
위 내용은 2022.12.22에 공부한 내용입니다.
'JavaStudy' 카테고리의 다른 글
| Java : 객체간의 협력(static, 변수 메모리) (0) | 2023.01.29 |
|---|---|
| Java : 참조자료형 변수, 접근제어 지시자, 정보은닉 (1) | 2023.01.29 |
| Java : 객체, 함수, 메서드 (0) | 2023.01.29 |
| Java : 반복문, 중첩 반복문, break, continue (0) | 2023.01.29 |
| Java : 연산자(2), 조건문, java의 기본기능 및 특징. (0) | 2023.01.29 |