-
JAVAProgramming/JAVA 2022. 9. 13. 03:16
# 자바의 타입
- 기본타입 primitive type
- 참조 타입 reference type : 객체의 번지를 참조하는 타입 ( 배열, 열거 클래스, 인터페이스 )
# 메모리 사용 영역 Runtime Data Area
- 메소드 영역 Method Area
: JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역
클래스 로더 -> 클래스별 정적 필드와 상수, 메소드 코드, 생성자 코드 등을 분류해 저장
- 힙 영역 Heap Area
: 객체와 배열이 생성되는 영역 ( JVM 스택 영역의 변수와 다른 객체의 필드에서 참조 )
-> 참조하는 변수나 필드가 없으면 의미 없는 객체가 되어 grabage collector 실행시켜 자동 제거
- JVM 스택 Stack
: 메소드 호출할 때마다 프레임 추가push , 메소드 종료되면 해당 프레임 제거 pop
-> 프레임 내부 로컬 변수 스택이 있는데, 기본 타입 변수와 차몾 타입 변수가 추가push 되거나 제거 pop
-> 스택 영역에 변수가 생성되는 시점 ( 초기화 : 최초로 변수에 값이 저장될 때 )
변수는 선언된 블록 안에서만 스택 존재, 블록 벗어나면 스택에서 제거 ( if 블록 )
scores 배열 변수는 stack영역에 생성되지만 ( 힙 영역의 주소 저장 ) , 실제 10,20,30은 힙 영역에 생성
자바는 배열을 객체로 취급int [ ] scores = { 10,20,30 }
* 참조 변수의 == , != 연산
- 동일한 번지 = 동일한 객체 참조
* null / NullPointerException
* String
String 변수 = “ 문자열 “ ;
String name;
name = “신용권”;
String hobby = “자바”;
>> 사실 문자열을 String 변수에 저장한다는 말은 엄밀히 말해 틀린 표현String name1= “박준”; String name2= “박준”;
name1과 name2는 동일한 String 객체 참조
일반적으로 변수에 문자열 저장 : 문자열 리터럴 사용String name1= new String(“박준”); String name2= new String(“박준”);
new 연산자 : 힙 영역에 새로운 객체 만들 때 사용하는 연산자 ( 객체 생성 연산자 )
이 경우 name1과 name2는 다른 string 객체 참조
** 같은 String객체인지 상관없이 내부 문자열 비교하고 싶을 ㄸㅐ
-> equals () 메소드 사용 : boolean result = str1.equals(str2); //str1 과 str2는 차례로 원본 문자열과 비교 문자열
배열
: 같은 타입의 데이터를 연속된 공간에 나열하고 각 데이터에 인덱스 부여해놓은 자료구조
인덱스는 0부터 시작
- 같은 타입의 데이터만 저장 ( Type mismatch . error )
- 한 번 생성된 배열은 길이 늘리거나 줄일 수 없음배열 선언
형식 1.
타입 [ ] = 변수 ;
ex ) int [ ] = intArray ;
형식 2.
타입 변수 [ ] ;
ex ) int intArray [ ] ;배열은 객체이므로 힙 영역에 생성, 배열 변수는 힙 영역의 배열 객체 참조, 참조할 배열 객체 없다면 배열변수는 null값으로 초기화될 수 있음
타입 [ ] = 변수 null;배열 객체 생성
-> 값 목록 이용
타입 [ ] 변수 = { 1, 2, 3, 4, 5 }; // 중괄호 { } 는 주어진 값들을 항목으로 가지는 배열 객체를 힙에 생성하고, 배열 객체의 번지를 리턴!
-> new 연산자 이용package sec02.exam01; public class ArrayCreateByValueListExample { public static void main ( String [ ] args ) { int[] scores = {83, 90, 87}; System.out.println("scores[0] : " + scores[0]); System.out.println("scroes[1] : " + scores[1]); System.out.println("scores[2] : " + scores[2]); int sum= 0; for(int i=0; i<3; i++) { sum += scores[i]; } System.out.println("총합" + sum); double avg = (double) sum / 3; System.out.println("평균:"+avg); } }
- > 주의할 점 : 값의 목록으로 배열 객체를 생성할 때 배열 변수를 이미 선언한 후에는 다른 실행문에서 중괄호를 사용한 배열 생성이 허용되지 않음, 이미 선언된 배열 변수에 중괄호 이용한 배열 생성하려면 new 연산자 이용
배열 변수 미리 선언한 후 값 목록들이 나중에 결정되는 상황이라면 new 연산자 사용해 값 목록 지정해주면 됨
변수 = new 타입 [ ] { 1, 2, 3, 4, 5 };
ex) String [ ] names = null ;
names = new String [ ] { " 신용권 ", " 홍길동 " , " 김자바 " };메소드의 매개값이 배열일 경우도 마찬가지
예시int add(int[] scores) {...} int result = add ( new int[] {95, 85, 90} ); // 꼭 이렇게 new연산자 써주어야함
-> new 연산자 이용
: 값의 목록을 가지고있지 않지만, 향후 값들을 저장할 배열을 미리 만들고 싶다면 new연산자로 배열 객체 생성
타입 [ ] 변수 = new 타입 [ 길이 ] ;
이미 배열 변수가 선언된 경우에도 new 연산자로 배열 생성 가능//예시 int[] intArray = new int[5];
그리고 배열 생성 시의 기본값
int, short, byte : 0
char : \u0000
long : 0L
float : 0.0F
double : 0.0
boolean : false
class interface String : null배열 길이 : 배열에 저장할 수 있는 전체 항목의 개수 , 배열 객체의 length 필드를 읽어 길이 얻을 수 있음
** 필드는 객체 내부의 데이터
length필드 : 배열 변수에 도트 연산자 붙이고 length
length 필드는 읽기 전용 필드이기 때문에 값 변경 X
* 배열의 length 필드는 for문을 사용해서 배열 전체를 루핑할 때 매우 유용하게 사용
ex ) for ( int i=o; i<scores.length; i++ ) { }학습 교재 : 두잇 자바 프로그래밍 입문, 혼자 공부하는 자바
'Programming > JAVA' 카테고리의 다른 글
스프링부트 3 백엔드 개발자 되기 : 시작하는 과정 (2) (0) 2023.08.17 스프링부트 프로젝트 게시판 (0) 2023.05.27 [ JavaSpring ]Whitelabel Error Page 해결방법 (0) 2023.04.28 [ JavaSpring ] Hello world 출력 (0) 2023.04.28 JSP 게시판 만들기 강좌 -6강 (0) 2022.09.13