혼자 공부하는 자바 Chapter 1
오늘은 부트캠프 첫날입니다. 사전 스터디 할 때는 자바스크립트를 공부했는데 오늘부터 제가 선택한 언어인 JAVA를 배웁니다. Sololearn으로 레슨 64개 중 29개를 완료한 상태입니다. 부트캠프 시작 전에 완료할 생각이었는데 Getter 와 Setter 에서 막혔습니다. 이번주는 Sololearn의 Java 레슨을 다 끝내고 혼자 공부하는 자바 책 Chapter 5를 스케쥴에 맞춰 끝내는 것이 목표입니다.
01-1 프로그래밍 언어와 자바
- 기계어: 이진법으로 이루어진 코드
- 소스파일(Source file): 프로그래밍 언어로 작성한 파일
- 컴파일(compile): 소스파일을 기계어로 번역하는 것
- Java: 1995년 Sun Microsystems에서 발표; 안드로이드폰 앱, 웹사이트 개발 핵심 언어로 사용; 모든 운영체제에서 실행 가능한 데스크톱 어플리케이션 개발에 사용
- 오라클에서 라이선스 보유; JDK(Java Developement Kit:개발 실행 환경(JVM)과 컴파일러 등을 제공)를 배포
- Java의 특징
- 모든 운영체제에서 실행 가능
- 객체지향 프로그래밍: 객체를 만들고, 이 객체들을 서로 연결해서 더 큰 프로그램을 완성하는 기법
- 메모리 자동 정리: RAM을 자동 관리; 코드 작성 집중 가능
- 무료 라이브러리 풍부
자바 개발 도구 설치
- 자바 개발 도구(JDK: Java Development Kit) 설치 필요
- Open JDK(무료)와 Oracle JDK(유료)가 있는데 LTS(Long term Support)를 위해서는 Oracle JDK 사용이 안정적
- 나는 JAVA 11를 설치함
- JDK JAVA SE(Standard Edition) 표기
- JAVA 11을 설치한다는 것은 JAVA SE 11 또는 JDK 11을 설치한다는 것과 동일한 의미
- 주 버전이 높은 것 보다는 버그를 지속적으로 수정해나가는 LTS 버전을 사용할것을 추천
환경 변수 설정
맥에서는 어떻게 하는 건지 책에 안나와 있음
검색해보니 terminal을 사용하라함 -> 스파르타 자바 강의를 보니 Window 설치는 환경 변수 내용이 들어있는데 Mac에는 없는 걸로 보아 상관없는듯
01-2 이클립스 개발 환경 구축
이클립스를 사용하지 않고 IntelliJ라는 툴을 사용하기 때문에 교양정도로 알고 지나가겠습니다....
이클립스
- 오픈소스 통합 개발 환경(IDE: Integrated Development Environment)
- IDE: 프로젝트 생성, 자동 코드 완성, 디버깅 등 여러 개발에 필요한 기능 통합 제공
01-3 자바 프로그램 개발 과정
- .java 텍스트 파일 생성
- 자바 언어로 코드 작성
- 컴파일러 javac 명령어로 컴파일
- 컴파일 성공하면 확장명이 .class인 바이트 코드 파일 생성
- java 명령어로 바이트 코드를 완전한 기계어로 번역해서 실행
바이트 코드 파일과 자바 가상 기계
- 자바 프로그램은 바이트 코드(byte code) 파일(.class)로 구성
- 바이트 코드 파일은 운영체제에서 바로 실행할 수 없고, 자바 가상 기계(JVM: Java Virtual Machine)라는 번역기가 필요
- JVM 사용 이유: 바이트 코드 파일을 다양한 운영체제에서 수정하지 않고 사용 가능 -> 자바 언어 성공 요인
- javac 명령어로 컴파일된 바이트 코드 파일은 JDK가 설치된 어떤 운영체제에서도 java 명령어로 동일하게 실행
- 개발자는 운영체제와 상관없이 자바 프로그램을 개발 가능
- 모듈명: JDK 11 버전 이후부터는 명령 프롬프트와 같은 명령 라인에서 프로젝트를 실행할 때 필요; module-info.java 보고 확인 가능
- module-info.java 라는 모듈을 만들라고 하는데 스킵하고 Hello.java 부터 실행함
- public static void main(String[] args) 를 자동 추가 설정하는 방법
- 단축키: ctrl + J
- psvm + enter
- 자동 추가는 이클립스에서 제공하는 기능; intelliJ 템플릿 수정할 수 잇음
- sout 단축키 -> System.out.println();
명령 라인에서 컴파일하고 실행하기
명령 프롬프트 또는 터미널과 같은 명령 라인에서 javac와 java 명령어로 소스 파일을 직접 컴파일하고 실행하는 법
-> 명령 라인에서 프로젝트 컴파일 및 바이트 코드 파일 실행 방법
- 예시가 윈도우라 안되는 부분들은 구글링중.... -> 맥의 명령어가 훨씬 쉽다
- javac 명령어로 컴파일해서 바이트 코드 파일 생성하기
- javac Hello.java --> Hello.class 파일(바이트 코드 파일) 생성됨
- tree 명령어
- 맥 터미널에서 실행 위해서 Homebrew 프로그램 설치 https://brew.sh/index_ko -> tree 설치 brew install tree 입력
- 설치가 안됨.....ㅠ -> 다시 하니까 됨~
- java 명령어로 바이트 코드 실행
- JDK 8 이전 버전: java -cp bin sec03.exam01.Hello
- JDK 11 이후 버전
- javac -p [바이트 코드 파일 저장 위치] -m 모듈/패키지이름...클래스이름
- java -p bin -m chap01/sec03.exam01.Hello
- 근데 내 맥북프로에서는 JDK 8 이전 버전이 먹히고 11이후 버전은 안됨;;
프로그램 소스 분석
패키지 선언
클래스 선언
- {} 중괄호 블록의 앞부분인 public class Hello -> 클래스 선언
- public class: 공개 클래스; 클래스 이름은 소스 파일명과 동일(대소문자도 일치)
- 클래스는 필드 또는 메소드를 포함하는 블록
- 메소드: 어떤 일을 처리하는 실행문들을 모아 놓은 블록
- javac 명령어로 컴파일 하면 클래스 이름에 .class가 붙어 바이트 코드 파일이 생성됨;
- Hello.class -> Hello 클래스라고 부름
- java 명령어로 바이트 코드 파일 실행하려면 클래스 블록 내부에 main() 메소드 블록을 가지고 있어야 함
- {} 중괄호 블록의 앞부분, public static void main(String[] args) -> 메소드 선언부
- main: 메소드 이름
- java 명령어로 바이트 코드 실행 시 main() 메소드 찾아 블록 내부 먼저 실행
- main() 메소드: 프로그램 실행 전입점 (entry point)
주석 사용하기
- 라인 주석 : // ...
- 범위 주석: /* ... */
- 도큐먼트 주석: /** ....*/ -> 주로 javadoc 명령어로 API 도큐먼트 생성할 때 사용
- 문자열 내부에는 주석 붙이기 불가능
- 주석을 많이 작성한다고 해서 바이트 코드 파일 크기가 커지는 것은 아님
- 주로 실행문에 사용
실행문과 세미콜론(;)
- 컴파일러는 ; 까지 실행문으로 해석하기 때문에 ; 를 붙여서 실행문이 끝났음을 표시해야함
Chapter 2 변수와 타입
02-1 변수
변수 선언
- 변수의 타입과 이름 결정
- 첫번째 글자는 문자 , '$', '_' 이어야 하고 숫자로 시작할수 없음
- 영어 대소문자 구분
- 첫 문자는 영어 소문자, 다른 단어 붙을 경우 첫문자 대문자 (관례)
- 문자 수 제한 없음
- 자바 예약어 사용 불가
값 저장
- 대입 연산자(=) 사용
- 오른쪽 값을 왼쪽 변수에 저장한다는 의미
변수 사용
- 출력문이나 연산식 내부에서 변수에 저장된 값을 출력하거나 연산할 때 사용
변수 사용 범위
- 모든 변수는 {} 중괄호 블록 내에서 선언되고 사용됨
- 로컬 변수(local variable): 메소드블록 내에서 선언된 변수; 메소드 실행이 끝나면 메모리에서 자동으로 없어짐
- 메소드 블록 전체에서 사용하고 싶으면 메소드 블록 첫머리에 삽입
- 특정블록내부에서만 사용된다면 해당 블록 내 선언
02-2 기본 타입 Primitive Type
구분 | 저장되는 값에 따른 분류 | 타입의 종류 |
기본 타입 | 정수 타입 | byte, char, short, int, long |
실수 타입 | float, double | |
논리 타입 | boolean |
정수 타입
타입 | 메모리사용크기 | 저장되는 값의 허용 범위 | |
byte | 1byte | 8bit | -128 ~ 127 |
short | 2byte | 16bit | -32.768 ~ 32.767 |
char | 2byte | 16bit | 0 ~ 65535 (유니코드) |
int | 4byte | 32bit | -2,147,483,648 ~ 2,147,483,647 |
long | 8byte | 64bit | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
- 리터럴(literal): 프로그래머에 의해 직접 입력된 값
- char 타입: 하나의 문자를 작은따옴표(')로 감싼것 = 문자 리터럴 -> 유니코드로 변환되어 저장됨
- 유니코드로 변환되기 때문에 int 타입 정수에도 저장 가능 -> 유니코드 자체가 출력됨
스트링 타입
- 문자열: (")로 감싼 문자
- String은 기본 타입이 아닌 클래스 타입임
- 이스케이프문자(Escape): 문자열 내부에 역슬래시(\)가 붙은 문자를 사용; 특정 문자를 포함시킬 수 있음
- ex) \t -> 탭만큼 띄우기; \n -> 한 줄 내림
실수 타입
- float 타입 저장시, f 또는 F 붙여 컴파일러가 타입을 인지하게 함
- 자바는 실수 리터럴을 기본적으로 double 타입으로 인식함
- float은 소수점 7자리 이하, double은 소수점 15자리 (좀 더 정확한 데이터 저장이 가능)
논리 타입
- boolean 타입: true or false 로 저장
02-3 타입 변환
자동 타입 변환
- 자동으로 타입 변환이 일어나는 것; 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장 될 때
- byte < short < int < long < float < double
- byte은 char 로 변환 불가 ; char은 음수가 없음
강제 타입 변환
- casting: 큰 허용 범위 타입을 작은 허용 범위 타입으로 강제로 나눠서 저장하는 것
- 작은 허용 범위 타입 = (작은 허용 범위 타입) 큰 허용 범위 타입
정수 연산에서의 자동 타입 변환
- 정수 타입 변수가 산술 연산식에서 피연산자로 사용되면 int 타입보다 작은 byte, short 타입의 변수는 int 타입으로 자동 타입 변환되서 연산 수행
- 타입 변환이 줄면 실행 성능 향상
- 두 피연산자 중 허용 범위가 큰 타입으로 변환되어 연산을 수행
- 정수 연산 실수 연산으로 변경하는 방법:
실수 연산에서의 자동 타입 변환
- 피연산자 중 하나가 double 타입이면 다른 피연산자도 double 타입으로 자동 타입 변환되서 연산을 수행 -> 연산결과 double 타입
문자열을 기본 타입으로 강제 타입 변환
기본 타입을 문자열로 변환
- String.valueOf(기본타입값);
02-4 변수와 시스템 입출력
모니터로 변수값 출력하기
- println(내용): 괄호 안의 내용을 출력하고 행을 바꿔라; ln = line
- print(내용): 괄호 안의 내용을 출력만 해라
- printf("형식문자열", 값1, 값2, ...): 괄호 안의 첫번 째 문자열 형식대로 내용(format string)을 출력해라
- 형식 문자열에 포함될 값이 2개 이상인 경우, 순번(argument_index$)을 알려준다
키보드에서 입력된 내용을 변수에 저장하기
- 키코드 읽는 법
- keyCode = System.in.read();
- 시스템이 가지고 있는 입력 장치에서 입력된 키코드를 읽어라
- throw Exception: System.in.read()
- System.in.read()의 단점: 키코드를 하나씩 읽기 때문에 2개 이상의 키가 조합된 한글을 읽을 수 없음 -> Scanner로 보완
- keyCode = System.in.read();
- Scanner scanner = new Scanner(System.in)
- 시스템의 입력장치로부터 읽는 scanner를 생성해서 Scanner 변수 scanner에 저장
- String inputData = scanner.nextLine()
- 읽은 문자열(enter키 이전까지 입력된 문자열을 읽음)을 String 변수 inputData에 저장
- boolean result = inputData. equals("비교문자열")
- inputData가 비교문자열과 같으면 true, 다르면 false
- 자바는 기본타입의 값이 동일한지 비교할 때에는 ==를 사용하고 문자열(String)이 동일한지 비교할 때는 equals() 메소드를 사용
튜터님의 미션! 터미널로만~ java 파일 만들고 실행하기
java를 IDE(IntelliJ)를 사용하지 않고 오직 터미널로만 코딩해서 실행하기
hong@Jinhongui-MacBookPro chap01 % java -version //자바 버전 확인했음
openjdk version "11.0.16.1" 2022-07-19 LTS
OpenJDK Runtime Environment Zulu11.58+23-CA (build 11.0.16.1+1-LTS)
OpenJDK 64-Bit Server VM Zulu11.58+23-CA (build 11.0.16.1+1-LTS, mixed mode)
hong@Jinhongui-MacBookPro chap01 % touch Hello.java //① Hello라는 파일명의 자바 파일 생성
hong@Jinhongui-MacBookPro chap01 % vi Hello.java //②Hello라는 이름의 java 파일을 수정, i를 누르면 (insert 화면이 뜸)
// ③:wq 로 저장하고 esc로 수정모드에서 나오기
hong@Jinhongui-MacBookPro chap01 % javac Hello.java //④컴파일러로 클래스 파일 변환
hong@Jinhongui-MacBookPro chap01 % java Hello //⑤자바 파일 실행
Hello java! //⑥yay!
'TIL' 카테고리의 다른 글
TIL 혼자 공부하는 자바 JAVA 챕터 1~5 복습 221112 (0) | 2022.11.12 |
---|---|
TIL 혼자 공부하는 자바 JAVA 참조타입 배열 array 221111 (0) | 2022.11.11 |
TIL 혼자 공부하는 자바 JAVA 핵심 쏙쏙 Git 3주차 푸시 토큰 오류 해결 221110 (0) | 2022.11.10 |
TIL 입학시험과 핵심 쏙쏙 Git 2주차 (0) | 2022.11.09 |
TIL 혼자 공부하는 자바 JAVA 연산자 핵심 쏙쏙 Git 1주차 221108 (0) | 2022.11.08 |