항해 99 : TIL - 1
학습 참조 : 강의 - Java 문법 종합반 1주차
학습 내용 정리
JVM
Java Virtual Machine : 자바를 다양한 환경에서 실행할 수 있게 해준다.
- 클래스로더, JIT 컴파일러, 인터프리터, 가비지 컬렉터가 있음
바이트 코드
Java 컴파일러를 통해 JVM이 이해할 수 있는 기계어로 변환된 java 소스 코드
인터프리터
바이트 코드를 JVM이 읽을 수 있도록 읽고 해석
Java 컴파일러
개발자가 작성한 자바 소스 코드를 JVM이 이해할 수 있는 바이트 코드로 변환하는 역할 수행
JIT 컴파일러
인터프리터 보조 역할
- 프로그램이 실행 중인 런타임에 실제 기계어로 변환해 주는 컴파일러 (동적 번역 dynamic translation)
메모리 영역
Java에서 사용하는 데이터를 저장하는 영역
클래스 로더
바이트 코드를 메모리 영역에 담는 역할
가비지 컬렉터
메모리 영역의 불필요(안 쓰는) 데이터를 삭제하는 역할 수행
프로그램 실행 과정
자바 소스 코드 → 자바 컴파일러 → 바이트 코드 → 클래스 로더 / 자바 클래스 라이브러리 → 인터프리터, JIT 컴파일러 → JVM → 런타임(메모리 영역) / 가비지 컬렉터 → 시스템 출력
JRE
자바 실행환경(Java Runtime Environment)
- 바이트 코드를 실행시키는 역할
JDK
자바 개발키드(Java Development Kit)
- 자바 컴파일러 기능
- 코드 디버깅
- 시스템 오류나 버그를 찾아내고 수정하는 기능 제공
변수
자바에서 사용하는 값을 저장하는 공간
선언 / 초기화
- 선언 : 변수를 사용하기 위해 타입(값의 타입)과 이름(변수명)을 정하는 것
- 초기화 : 선언 된 변수에 값을 저장하는 것(자바에서는 선언과 동시에 값을 저장할 수 있음)
변수 종류
자바에서는 변수를 기본적으로 기본형 변수와 참조형 변수로 나눌 수 있음
기본형/ 참조형
- 기본형 변수(primitive variable) : 변수에 값을 직접 저장하는 타입을 기본형 변수라고 한다.
- 숫자형 변수
- 정수형 : int, long (byte, short 는 많이 안 쓰임)
- 실수형 : float, double
- 문자형 변수(char)
- 'A', '가' 등 글자 1개를 저장
- 논리형 변수(boolean)
- 참(true), 거짓(false) 값을 저장
- 숫자형 변수
- 참조형 변수(reference variable) : 변수에 실제 값이 저장되는 참조값(주소값)을 저장하는 타입을 참조형 변수라고 한다.
- 문자열(String) : 문자열을 저장하는 변수
- 배열(Array)
- 리스트(List)
- 객체(Object)
- 기본형을 제외한 모든 변수는 참조형 변수이다.
래퍼 클래스 변수
기본형 변수를 클래스로 감싸는 변수, 객체 지향의 기능을 사용하기 위해 쓴다.
- 기본형 타입의 변수 명의 첫글자를 대문자로 바꾸어 정의
- 박싱 : 기본형 → 래퍼 클래스
- 언박싱 : 래퍼 클래스 → 기본형
숫자와 문자(ASCII)
Ascii : 문자를 컴퓨터가 이해할 수 있는 값으로 변환한 값을 매칭한 표.
Scanner(input)
자바에서 사용자에게 값을 입력받기 위해 사용하는 클래스 라이브러리
package test;
import java.util.Scanner;
public class Ascii {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("숫자 입력: ");
int asciiNumber = sc.nextInt();
char ch = (char)asciiNumber;
System.out.println(ch);
char letter = sc.nextLine().charAt(0);
int asciiNumber2 = (int)letter;
System.out.println(asciiNumber2);
}
}
형변환(Casting)
데이터의 타입을 다른 타입으로 변환하는 것
- 예) int → long , float → double
자동 형변환 / 명시적 형변환
- 자동 형변환 : 작은 범위의 타입을 큰 범위의 타입에 저장할 때 자바에서 자동으로 데이터 타입을 변환해주는 것
- int → long , long → double
- 명시적 형변환 : 큰 범위의 타입을 작은 범위의 타입에 저장할 때 값 손실이 발생하기 때문에 개발자가 직접 변환할 타입을 명시해 주는 것
- long → int , double → int
- 형변환은 다른 타입의 변수를 계산할 때도 적용된다.
- 데이터 타입에서 저장할 수 있는 범위를 넘어선 값을 저장할 때 오버플로우(값 손실, 최대값을 넘어서 최소값으로 나옴)이 발생한다.
package test;
public class Casting {
public static void main(String[] args) {
// 형변환
// 명시적 형변환 (작은 범위의 타입에 큰 범위의 타입 넣기)
double doubleNumber = 3.14;
int intNumber = (int) doubleNumber;
System.out.println(intNumber);
// 자동 형변환 (큰 범위의 타입에 작은 범위의 타입 넣기)
long longNumber = 100L;
doubleNumber = longNumber;
System.out.println(doubleNumber);
// 형변환 계산 - 자동
double sumNumber = intNumber * doubleNumber;
System.out.println(sumNumber);
// 형변환 계산 - 명시적
int sumNum = intNumber * (int)doubleNumber;
System.out.println(sumNum);
}
}
팀 과제
Git fork 사용 팀 SA 작성
순서
- 팀장이 만든 Git Repository를 fork 한다.
- fork한 저장소에서 clone download 후 로컬에서 git clone 실행
- 팀장이 만든 원본 저장소를 원격 저장소로 추가
git clone https://github.com/eleunadeu/hh99-SA.git
git remote main<원격 저장소 별칭> https://github.com/java-basic99/hh99-SA.git<원격 저장소 URL>
- 깃헙 아이디인 브랜치 만들기
git checkout -b eleunadeu
- README.md 내용 수정 후 커밋
git add . (모든 파일 변경)
git status (변경 사항 확인)
git commit -m "커밋 메시지 입력" (변경 사항 커밋)
git push origin eleunadeu
- 다음 팀원이 동일하게 브랜치 만들고, 그 전 팀원의 커밋 기록을 가져와 내용 추가
- 다음 팀원도 동일하게 수행
- 각자 팀장 저장소인 main branch에 pull request 실행
- 깃허브 브랜치에서 compare & pull request 버튼 누르기
- 다른 팀원의 pull request에 리뷰 남기기
- conflict 발생으로 인한 request change
- 원격 저장소에서 최신 변경사항 가져오기
- 충돌이 있는 브랜치 체크아웃
- 병합 실행(충돌 발생 충돌이 발생한 부분을 수정 후 변경 사항 저장 후 커밋
- 변경 사항을 원격 브랜치에 푸시
- 깃허브로 돌아가서 다시 pull request 실행
git fetch origin/main(원격 저장소 이름)
git checkout eleunadeu(총돌이 있는 브랜치)
git merge origin/main
(충돌 발생한 부분 수동으로 수정)
git add.
git commit -m "충돌 사항 수정"
git push origin eleunadeu
기술 멘토링
공부하다가 이해가 안 되거나 모르는 문제가 생겼을 때 해결 방법(항해 99 기간 중)
- 기술 매니저님께 질문한다
- 질문드릴 때는 모르겠는 사항에 대해서 이해를 하기 위해 어떤 노력을 했는데 이해가 되지 않아서 질문드립니다.
- 해당 사항에 대해 이해하거나 해결할 수 있는 다른 방법이 있는지 질문드리는 것이 좋음
- 코드 짤 때 ChatGPT 사용 관련 조언
- ChatGPT를 사용하는 데 주의 사항이 필요함
- GPT가 답변으로 준 코드를 그대로 사용하지말고 충분한 교차 검증 이후에 사용하는 것이 좋음(GPT가 생성한 코드를 왜 이런 식으로 생성했는지 질문하면서 충분히 검증하고 사용)
- ChatGPT를 사용하는 데 주의 사항이 필요함
'항해 99 > Java' 카테고리의 다른 글
객체 지향, 상속, 다형성 (1) | 2024.02.07 |
---|---|
연산자, 조건문, 반복문, 배열 (1) | 2024.02.06 |
Java 기초 12 - final , 상속 (1) | 2024.01.30 |
Java 기초 11 - 자바 메모리 구조와 Static (1) | 2024.01.29 |
Java 기초 10 - 패키지, 접근 제어자 (1) | 2024.01.29 |