Chap 4 조건문
- if문
- if-else문
- switch문
✨ if문 (if문, if-else문)
✨ switch문
- 변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다
- 괄호 안의 변수 값과 동일한 값을 갖는 case로 가서 실행문을 실행한다.
- 변수 값과 동일한 값을 갖는 case가 없으면 default로 가서 실행문을 실행한다. (생략 가능)
- break : 다음 case를 실행하지 않고 switch문을 빠져나가기 위해 사용됨
👉🏻기본미션
반복문
- 어떤 작업이 반복적으로 실행되도록 할 때 사용된다.
- 반복문에는 for, while, do-while문이 있다.
🌟 for문
for(초기화 식; 조건식; 증감식){
실행문;
}
🌟 중첩 for문
- for문 안에 또 다른 for문을 내포하는 것
- 바깥쪽 for문이 한 번 실행할 때마다 중첨된 for문은 지정된 횟수만큼 반복해서 돌다가 다시 바깥쪽 for문으로 돌아간다
for(int i=1; i<10; i++){
for(int j=1; j<=9; j++{
System.out.println(i+"x"+j+"="+i*j);
}
}
🔆 While 문
- 조건식이 true일 경우게 계속해서 반복된다
- 조건식이 false인 경우 while문을 종료한다
int i=1;
while(i<10){
System.out.println(i);
i++;
}
🔆 do-while문
- 실행문을 우선 실행하고 실행결과에 따라서 반복 실행을 결정한다
- 작성시 while() 뒤에 반드시 세미콜론을 붙어야 된다
⛏️ break문
- for, while, do=while문의 실행을 중지할 때 사용한다
- 만약 반복문이 중첩돼있을 경우, 바깥쪽 반복문에 이름(라벨)을 붙이고, 'break 이름'을 사용한다
🚩 Continue문
- 반복을 종료하지 않고 계속 반복을 수행한다
- continue문 실행시 for문의 증감식 또는 while, do-while문의 조건식으로 이동한다
Chap5 참조타입
기본 타입
- byte, short, char, int, long, float, double, boolean타입
- 값 자체가 변수에 저장됨
참조 타입
- 객체의 번지를 참조하는 타입
- 배열, 열거, 클래스, 인터페이스 변수는 메모리의 번지를 변수 안에 저장한다.
메모리 사용 영역
- JVM은 운영체제에서 할당받은 메모리 영역을 메소드 영역, 힙 영역, 스택 영역으로 구분해 사용한다
메소드 영역
- JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역이다
- 정적 필드, 메소드 코드 , 생성자 코드 등을 분류해서 저장
힙 영역
- 객체와 배열이 생성되는 영역
- 주소가 저장 (call by reference)
- 참조하는 변수나 필드가 없다면 JVM이 자동으로 제거함
JVM 스택 영역
- 메소드를 호출할 때마다 프레임을 추가하고 메소드가 종료되면 해당 프레임을 제거하는 동작을 수행한다
- 참조 타입 변수는 스택 영역에 힙 영역의 객체 주소를 가진다
- 변수 생성
번지 비교 ( ==, != )
기본 타입 변수에서 ==, != | 변수 값이 같은지, 아닌지를 좃 |
참수 타입 변수에서 ==, != | 동일한 객체를 참조하는지, 다른 객체를 참조하는지 즉 번지 값을 비교한다. |
참수 타입 변수에서 동일한 번지 값을 갖고 있다는 것은 동일한 객체를 참조한다는 의미다.
null과 NullPointerexception
- 참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null값을 가질 수 있다 (초기화)
- nll로 초기화된 참조 변수는 스택 영역에 생성된다.
- null : String 변수가 참조하는 String 객체가 없다는 뜻
예외 : 도중에 발생하는 오류
-> NullPointerexception
참조를 읽은 String 객체는 어떻게 될까?
>> JVM이 메모리에서 자동 제거 해준다.
new 연산자 (객체 생성 연산자)
- String 객체를 생성시킴
- 힙 영역에 새로운 객체를 만들 때 사용하는 연산자로 객체 생성 연산자라고 한다.
String name1 = new String("hi");
String name2 = new String("hi");
name1 == name2;
name1 == name2의 값은 false다.
왜냐하면 name1과 name2는 new 연산자를 통해 서로 다른 String 객체를 참조하고 있기 때문이다.