Today I Learned
(24.04.22)[2주차] Java문법 종합반 강의(Java입문, 변수/상수, 연산자, 조건문/반복문, 배열)
2주차가 시작이 되었는데 생각보다 과제가 생각보다 Java의 모든 기능을 한번 훝는 느낌으로 나왔기 때문에
다음주 수요일 과제 제출 전까지 예습했던 Java내용을 한번에 복습을 해야할 필요가 있었다.
따라서 이번주 계획 수정
- 목요일 오전까지 Java문법 종합반 강의를 통한 Java 복습 및 정리
- 목요일 오후 ~ 화요일 오후 까지 1/4로 나눠서 하루치 과제 코드 짜기 및 점검
이렇게 학습을 빠르게 치고, 과제를 진행하면서 스스로 코드를 좀 짤 수 있는 시간을 가지는 방향을 하기로 했다.
Java문법 종합반 강의 간단정리
- 사전캠프 때 Java Guidbook으로 예습을 한 내용과 Java의 정석 개인 학습의 내용을 합친 내용이긴 하지만, 그냥 넘기기 보다는 한번더 훝으면서 마지막 복습이란 느낌으로 진행
- 미리 예습한 내용과 반복되는 내용은 가볍게 정리/점검, 새로배우는 내용 스레드관련 부분이 나올 경우, 좀더 심화해서 듣기 계획
- 강의 내용이 방대하여 스스로 강의를 들으면서 최대한 핵심만 남기고 줄이면서 정리하는 느낌으로 진행
더보기
Java 언어
- C언어를 가져온 언어로 객체 지향 언어
- 메서드와 클래스를 통해서 객체를 형성, 작동하는 언어
Java 기능
- OS 구분없이 공통 실행환경
- OS 위에서의 Application 작동 가능
- 쉬운 유지보수
- Class를 통한 Object 객체를 통해서 작동하므로 쉽게 다룰 수 있음
- 높은 안정성
- Complier를 통한 오류 및 보안 기능
- 대규모 앱 개발이 가능
- Network, DB 연결 및 통신 처리 API가 다양
- 방대한 양의 개발 도구와 라이브러리
- Java의 종사하는 사람들이 많이 있고, 있었기 때문에 가능
JVM, Java Virtual Machine
- 자바 가상 머신, Java프로그램을 실행시킬 수 있는 가상의 기기 Machine를 만들어 주는 것
- 다양한 Device 환경에서 JVM의 구현을 통해 공통적으로 사용 가능
바이트 코드
- 소스코드를 Complier가 바꾼 언어로 .class 파일로 변환된 것
- JVM에 쓰일 수 있음
클래스 로더
- 메모리영역에 만든 Java 변환 파일을 옮기는 운반기
메모리 영역
- Java가 작동되기 위해 할당받은 영역, Java 데이터를 저장하는 영역
Esecution 실행 엔진
- 인터프리터
- 소스파일에서 컴파일 없이 즉시 번역되어서 동작 하는 언어
- 따로 기계어로 번역 필요 없음
- Java.class 코드 해석
- JIT 컴파일러
- Just In Time 컴파일러
- 인터프리터 효율을 높여주기 위한 빠른 컴파일러
- 적당한 시점에서 바이트 코드 전체를 한번에 컴파일 해서
- Garbage Collector
- 메모리 영역의 쓸모없는 데이터 정리
JRE Java Runtime Environment / 자바 실행 환경
- Java 프로그램을 실행 시키는 환경
- .class 파일만 실행 가능
JDK : Java Development Kit / 자바 개발 도구
- .java.class 파일로 바꾸는 컴파일러의 역할
- 디버깅
- 중단점을 기준으로 일시정지 + 코드 라인 단위 수행하여 확인
- intelliJ 기준 하나씩 확인해서 보여줌
- JRE의 기능
Java 언어
- C언어를 가져온 언어로 객체 지향 언어
- 메서드와 클래스를 통해서 객체를 형성, 작동하는 언어
- OS 구분없이 공통 실행환경
- OS 위에서의 Application 작동 가능
- 쉬운 유지보수
- Class를 통한 Object 객체를 통해서 작동하므로 쉽게 다룰 수 있음
- 높은 안정성
- Complier를 통한 오류 및 보안 기능
- 대규모 앱 개발이 가능
- Network, DB 연결 및 통신 처리 API가 다양
- 방대한 양의 개발 도구와 라이브러리
- Java의 종사하는 사람들이 많이 있고, 있었기 때문에 가능
JVM, Java Virtual Machine
- 자바 가상 머신, Java프로그램을 실행시킬 수 있는 가상의 기기 Machine를 만들어 주는 것
- 다양한 Device 환경에서 JVM의 구현을 통해 공통적으로 사용 가능
- 소스코드를 Complier가 바꾼 언어로 .class 파일로 변환된 것
- JVM에 쓰일 수 있음
- 메모리영역에 만든 Java 변환 파일을 옮기는 운반기
- Java가 작동되기 위해 할당받은 영역, Java 데이터를 저장하는 영역
- 인터프리터
- 소스파일에서 컴파일 없이 즉시 번역되어서 동작 하는 언어
- 따로 기계어로 번역 필요 없음
- Java.class 코드 해석
- JIT 컴파일러
- Just In Time 컴파일러
- 인터프리터 효율을 높여주기 위한 빠른 컴파일러
- 적당한 시점에서 바이트 코드 전체를 한번에 컴파일 해서
- Garbage Collector
- 메모리 영역의 쓸모없는 데이터 정리
JRE Java Runtime Environment / 자바 실행 환경- Java 프로그램을 실행 시키는 환경
- .class 파일만 실행 가능
- .java.class 파일로 바꾸는 컴파일러의 역할
- 디버깅
- 중단점을 기준으로 일시정지 + 코드 라인 단위 수행하여 확인
- intelliJ 기준 하나씩 확인해서 보여줌
- JRE의 기능
변수
- 값을 지정하는 어떠한 공간
- 값은 종류에 상관 없이 자유롭게 달라질 수 있음
- 변수 이름을 지정하여 사용 가능
선언
int Number = 1;
- 선언과 동시에 할당 가능
할당
Number = 2;
- 선언 값에 덮어쓰기라고 생각
상수
final (변수선언)
- 변하지 않는 값을 가지는 저장 공간
- 한번 지정하면 바꿀 수 없음
변수의 종류
기본형 변수
종류
- 논리형 변수 boolean
- true / false 지정
- 문자형 변수 char
- ‘a’ 처럼 한 글자만
- 정수형 변수 byte short int long
- 0을 포함한 모든 정수 가능
- 실수형 변수 float(4byte) double(8byte)
- 접미사 사용 f d 사용
참조형 변수
- 미리 정해둔 것이 없기 때문에 별도의 공간을 만들어서 지정한 뒤, 참조해서 쓴다고 생각
종류
- 문자형 변수 String
- ETC
- Object
- Array
- 참조형 번수이기 때문에 출력하면 값이 아닌 주소가 출력
- List …
래퍼 클래스 변수
- Wrapper Class 기본형 변수에 대응하여 감싸서 클래스 내 메서드를 사용할 수 있도록 하는 것
문자 char
- 아스키코드 사용
- 매핑되어 있는 문자에 해당하는 코드를 사용
문자열 String
- 여러개의 문자의 모음이라고 생각
- 문자가 1byte임에 있기 때문에 \0 Null문자가 뒤에 붙어서 저장
참조형 변수
- 주소형 변수
- 실제 값을 저장하는 것이 아니이기 때문에 크기가 큰 원본 데이터의 주소를 저장
- Heap 영역에 원본을 저장, Stack영역에 주소값을 저장하는 방식
Stack영역
- 정적메모리
- 정확한 크기가 정해진 기본형 변수값, 참조형 변수의 주솟값 저장
Heap 영역
- 동적메모리
- 크기가 변하는 값인 참조형 변수값 저장
형변환
정수형 ↔ 실수형
(int)변환할 값
(double)변환할 값
(float)변환할 값
- 소숫점 이하는 버려짐, 반올림X
- 데이터가 수정이 되는 것
- 명시적 형변환의 일종
자동형변환
- 굳이 지정을 하지 않아도 자동으로 형변환을 하는 것
- 작은 크기의 타입 → 큰 크기의 타입 으로 가능
- byte(1) < short(2) < int(4) < long(8) < float(4) < double(8) 크기 순서
- 서로간 계산이 될 경우 큰 타입으로 당연히 맞춰짐
- int + double이 된다면 double로 출력
- 큰 타입으로 작은타입을 귀속시키는 방식
캐스팅
- 형변환과 달리 큰 타입에서 작은 타입으로 형변환
- 값을 줄이기 위한 값의 손실이 발생
연산자 Operator & 피연산자
- 연산자 : 연산을 수행하는 기호 *** , +**
- 피연산자 : 연산자의 연산 수행 대상 9 , x , 3
산술 연산자
- + - * / % << >>
- 사칙 연산과 나머지 연산(%)
- 비트연산도가능
비교 연산자 Comparison Operator
- < > >= <= == !=
- 크고 작음과 같고 다름을 비교
논리 연산자
- && || ! & | ^ ~
- '그리고(AND)' 와 '또는(OR)' 으로 조건을 연결
대입 연산자
- **= += -= *=**
- 우변의 값을 좌변에 저장 (복합 대입 연산자)
- 추가 연산이 있을 경우 좌측을 우측과 연산해 좌측과 저장
- ++ --
- ++a 과 a++ 둘다 연산 순사가 다르기때문에 조심
기타 연산자
- (type) ?: instanceof
- 형변환 연산자
- **int intNum = (int)1.23** 이렇게 앞에 타입을 넣는 것
- 삼항 연산자
- ( 조건식 ) ? (반환값1) : ( 반환값2 ); 조건식이 true는 반환값1, false는 반환값2
- instanceof연산자
- 피 연산자가 클래스의 객체(종속된 클래스끼리도 가능)인지 아닌지 boolean값 반환
비트 연산자
- 비트는 연산단위를 컴퓨터가 이해할 수 있도록 매우 빠른 연산
- 2진수를 기준
연산자의 우선순위
- 산술 > 비교 > 논리 > 대입 순서
- 수학 문제를 순서대론 푸는 것이라고 생각
- & 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산)
- | 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산)
- ^ 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산)
- ~ 비트를 1이면 0으로, 0이면 1로 반전 시킴. (비트 NOT 연산, 1의 보수)
- << 명시된 수만큼 비트들을 전부 왼쪽으로 이동시킴. (left shift 연산)
- >> 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴.
- >> (right shift 연산)지정한 수만큼 비트를 전부 오른쪽으로 이동 시키며, 새로운 비트는 전부 0이 됨
조건문
if
if (조건식) {
조건식의 결과가 참일 때 실행하고자 하는 문장;
}
- 조건식은 boolean 타입, true 일때 {} 사이 출력
if - else
if (조건식) {
조건식의 결과가 **참**일 때 실행하고자 하는 문장;
} else {
조건식의 결과가 **거짓**일 때 실행하고자 하는 문장;
}
- 참일 때 거짓일 때, 각각 결과 출력
if - else if - else
if (조건식1) {
조건식1의 결과가 **참**일 때 실행하고자 하는 문장;
} else if (조건식2) {
조건식 1의 결과가 **거짓**이고, 조건식2의 결과가 **참**일 때 실행하고자 하는 문장;
} else {
조건식1의 결과도 **거짓**이고, 조건식2의 결과도 **거짓**일 때 실행하고자 하는 문장;
즉, 위의 어느 조건식에도 만족하지 않을 때 수행
}
중첩 if
if (조건식1) {
조건식1의 결과가 **참**일 때 실행하고자 하는 문장;
if (조건식2) {
조건식1 과 조건식 2의 결과가 **모두 참**일 때 실행하고자 하는 문장;
} else {
조건식1의 결과가 **참**이고, 조건식2의 결과가 **거짓**일 때 실행하고자 하는 문장;
}
} else {
조건식1의 **결과**가 거짓일 때 실행하고자 하는 문장;
}
Switch
switch (조건식) {
case 값1:
조건식의 결과가 값1과 같을 경우 수행할 문장;
break;
case 값2:
조건식의 결과가 값2와 같을 경우 수행할 문장;
**break**;
....
**default**:
조건식의 결과와 일치하는 case 문이 없을 때 수행할 문장;
}
- 하지만, break 일 경우에는 끝까지 진행아
if vs switch
- if는 ()안에 조건문을 여러개 지정 가능하나 swtich 는 작동상 한개의 피연산자의 대응하는 조건
- if는 switch보다 중복코드가 상당히 많음
반복문
for
for (초기화; 조건식; 증감식) {
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;
}
- 조건이 true가 될때 까지 반복
향상된 for
for (타입 변수이름 : 배열 or 컬렉션) {
배열 or 컬렉션의 길이만큼 반복적으로 실행하고자 하는 문장;
}
while
while (조건식) {
조건식의 결과가 거짓이 될 때까지 반복적으로 실행하고자 하는 문장;
}
- 조건식이 거짓이면 중지를 하면 됨
do-while
do {
조건식의 결과가 거짓인 동안 반복적으로 실행하고자 하는 문장;
} while (조건식);
- while과 다르게 먼저 실행되고 조건을 확인
배열 Array
- 자료구조를 구성하기위한 자료를 담는 공간
선언
- **타입 변수[]**
- **타입 변수[]**
생성
- **타입[]** 배열이름 **= new 타입[크기]**
- 크기를 지정해서 미리 생성을 해야
순회
- 처음부터 인덱스 0으로 순번이 존재하여 순회하면서 작업 가능
초기화
int[] num = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] num = {1, 2, 3, 4, 5, 6, 7, 8, 9};
- 초기화를 위해서 생성과 동시에 선언을 할 수 있음
복사
- 얕은 복사, 즉, 참조변수(이름)을 사용해서 복사해버리면 주소값만 복사
- Object클래스의 clone 메서드, Arrays클래스의 copyOf도 마찬가지\
- 복사된 배열의 요소를 바꾸어도 주소는 그대로 유지가 되는 것
- 깊은 복사를 사용해서 똑같은 값을 새로 지정해서 만들어야
- for문이나 Stream을 사용, 새로운 배열에 하나씩 넣어야
String 배열
- String은 char[] 형태
- String s = new String(char[] c); 로 선언이 가능
- 따라서 String 자체는 배열처럼 생각하여 메서드를 사용 가능
- Striong 클래스를 참조
다차원 배열
2차원 배열
- 배열 안에 배열이 있는 형태, 행렬의 형태
가변배열
- 배열의 행렬 기준 어떠한 값을 비워놓고 써도 가능
int[][] array1 = new int[3][]; // 가변배열로 가능
int[][] array2 = {
{10, 20, 30},
{10, 20, 30, 40},
{10, 20}
}; // 가변배열 3*4배열에서 여러개가 없는 형태로 초기화가능
- 그렇기 떄문에, 가변배열의 요소를 인덱스 for을 돌릴 때 length를 사용하거나 향상된 for을 사용해야
다차원배열
- n개의 배열이 안에 있는 것
생각보다 Java의 정석 기준으로 모든 Java의 내용을 활용해서 과제를 해야하기 때문에, 빠르게 사전캠프 기간동안 한 내용을 강의로 복습하고, 진행해야할 것 같다.
사전캠프가 아니었다면, 공부하느라 끙끙알았을 듯. 다행이다..
'Today I Learned' 카테고리의 다른 글
(24.04.24)[2주차] Java문법 종합반 강의(예외처리, 제네릭 / 쓰레드, 람다, 스트림, Optional) (0) | 2024.04.24 |
---|---|
(24.04.23)[2주차] Java문법 종합반 강의(컬렉션, 클래스, 상속, 인터페이스 + 실습 문제 풀이) (0) | 2024.04.23 |
(24.04.20)[1주차] WIL (1) | 2024.04.20 |
(24.04.19)[1주차] GitHub 가상 협업 상황 연습 / Web 서비스 기초 강의 (0) | 2024.04.19 |
(24.04.18)[1주차] GitHub 명령어 실습 및 연습 (1) | 2024.04.18 |