혼자 공부하는 자바 Chapter 1 

오늘은 부트캠프 첫날입니다. 사전 스터디 할 때는 자바스크립트를 공부했는데 오늘부터 제가 선택한 언어인 JAVA를 배웁니다. Sololearn으로 레슨 64개 중 29개를 완료한 상태입니다. 부트캠프 시작 전에 완료할 생각이었는데 Getter 와 Setter 에서 막혔습니다. 이번주는 Sololearn의 Java 레슨을 다 끝내고 혼자 공부하는 자바 책 Chapter 5를 스케쥴에 맞춰 끝내는 것이 목표입니다. 

 

혼자 공부하는 자바 TIL

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 버전을 사용할것을 추천

java 버전 표기

 

환경 변수 설정

맥에서는 어떻게 하는 건지 책에 안나와 있음

검색해보니 terminal을 사용하라함 -> 스파르타 자바 강의를 보니 Window 설치는 환경 변수 내용이 들어있는데 Mac에는 없는 걸로 보아 상관없는듯

 

01-2 이클립스 개발 환경 구축

이클립스를 사용하지 않고 IntelliJ라는 툴을 사용하기 때문에 교양정도로 알고 지나가겠습니다....

이클립스

  • 오픈소스 통합 개발 환경(IDE: Integrated Development Environment)
  • IDE: 프로젝트 생성, 자동 코드 완성, 디버깅 등 여러 개발에 필요한 기능 통합 제공

 

01-3 자바 프로그램 개발 과정

    1. .java 텍스트 파일 생성
    2. 자바 언어로 코드 작성
    3. 컴파일러 javac 명령어로 컴파일
    4. 컴파일 성공하면 확장명이 .class인 바이트 코드 파일 생성
    5. java 명령어로 바이트 코드를 완전한 기계어로 번역해서 실행

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 입력
    • 설치가 안됨.....ㅠ -> 다시 하니까 됨~

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$)을 알려준다

printf()

 

자주 사용되는 형식 문자열

키보드에서 입력된 내용을 변수에 저장하기

  • 키코드 읽는 법
    • keyCode = System.in.read();
      • 시스템이 가지고 있는 입력 장치에서 입력된 키코드를 읽어라
    • throw Exception: System.in.read() 
      • System.in.read()의 단점: 키코드를 하나씩 읽기 때문에 2개 이상의 키가 조합된 한글을 읽을 수 없음 -> Scanner로 보완
     
  • 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!

+ Recent posts