> Garbage Collecting
자바가상머신 JVM 이 메모리를 알아서 관리하는 것
생성된 객체를 메모리에서 해제하는 키워드 없음 - 더 이상 프로그램에서 쓰이지 않으면 garbage collector가 알아서 해제 수거
public class MainClass {
public static void main(String[] args) {
Pen p;
for(int i = 0; i <= 100000000; i++) { //객체를 100000000개 생성
p = new Pen();
}
}
}
//참고 - 객체생성
//Pen p = new Pen();
//->
//Pen p;
//p = new Pen();
위와 같이 객체를 100000000개 생성해도 메모리가 초과되지 않는 이유 - garbage collecting
> 패키지 package
클래스의 분류를 위해 사용함
project > package > class
프로젝트 안에 패키지 생성 (src 우클릭 - new - package)
*패키지 이름
모두 영문 소문자로 작성
소분류는 . 이용 (ex. packname.abc)
최상위 패키지 이름은 java로 시작할 수 없음 (java패키지는 표준 API로 구성된 패키지)
자바의 키워드도 사용될 수 없음
패키지 안에 클래스 생성
package 패키지이름;
클래스 최상단에 패키지가 자동으로 선언됨
직접 선언할 수 있음 (예를 들어 패키지를 이동/수정할 때 함께 수정되지 않았다면 직접 수정함)
package packname.abc; //항상 최상단에 존재 //패키지 packname.abc
public class Hello { //클래스 Hello
}
import
현재 클래스에서 다른 패키지의 클래스를 사용 (객체생성) 하려면 - package 선언과 class 선언 사이에 import 선언
import 패키지이름.클래스이름; ← 해당 패키지의 해당 클래스 사용
import 패키지이름.*; ← 해당 패키지의 모든 클래스 사용
*여러 개 선언 가능
*코드 입력 중 클래스명 입력 후 ctrl+space → import 되므로 더 간단히 할 수 있음
//여기 import_ex 패키지가 아닌 다른 패키지 fruit에 클래스 Apple이 존재한다고 가정
package import_ex; //패키지선언
import fruit.Apple; //혹은 import fruit.*; //import
public class MainClass { //클래스선언
public static void main(String[] args) {
Apple a = new Apple(); //객체생성
}
}
> 기본타입 primitive type & 참조타입 reference type
기본타입
- 정수, 실수, 문자, 논리 값 저장하는 datatype
- 변수에 실제 값 저장 (스택영역에 실제 값 저장)
참조타입
- 배열, 클래스, 인터페이스 타입 (객체의 주소를 참조하는 타입)
- 변수에 메모리의 주소값 저장 (스택영역에 주소값 저장, 힙영역에 내부 실제 값 저장)
public static void main(String[] args) {
Apple a = new Apple();
int i = 1;
System.out.println(i); //1
System.out.println(a); //fruit.Apple@7d4991ad - 변수에 주소가 저장되어있음
}
예시↓
String 문자열 동등 비교 .equals()
String 은 참조타입
같은 문자열은 같은 주소값을 가짐
문자열이 같아도 주소값이 같지 않게 하려면 new 키워드 사용 (String객체를 직접 heap영역에 생성)
혹은 다른 클래스에서 넘어온 문자열은 내용이 같아도 다른 주소를 가짐
String str1 = "안녕";
String str2 = "안녕";
String str3 = new String("안녕");
주소값 비교 : str1 = str2 ≠ str3 ← 비교연산자 == , != 로 비교
문자열 값 비교 : str1 = str2 = str3 ← 객체 동등 비교 메소드 .equals() 로 비교
'course 2021 > JAVA' 카테고리의 다른 글
day11 - this, super (0) | 2021.08.31 |
---|---|
day10 - inheritance, overriding, overloading (0) | 2021.08.31 |
day08 - class (0) | 2021.08.29 |
day07 - method (0) | 2021.08.25 |
day06 - array insert, update, delete (0) | 2021.08.24 |