3 분 소요

앞으로는 돌아가는 코드를 작성해주는 것은 AI의 몫일 것 같아, 궁극적인 개발자의 목적을 고민하다가 수강을 결심하였다. 김영한 강사의 자바 강의 로드맵을 방학까지 따라가며 코드의 목적을 이해하고자 하였다.


Day 1

자바 표준 스펙

  • 자바 표준 스펙
    • 자바는 이렇게 만들어야 한다는 설계도이자 문서
    • 기반으로 하여 여러 회사에서 실제 작동하는 자바를 만듦
    • 자바 커뮤니티 프로세스(JCP)에서 관리
  • 자바 구현
    • 회사마다 장단점 있음
    • Amazon Corretto는 AWS 최적화
  • 자바 구현 참고

컴파일과 실행

  • 자바는 컴파일 언어이자 인터프리터 언어
  • 자바 컴파일러(javac)가 자바 소스코드를 바이트코드로 컴파일
  • 자바 가상 머신(JVM)이 바이트코드를 실행

  • 자바 컴파일과 실행 과정
    1. 자바 소스코드 작성 (.java 파일)
    2. javac 명령어로 컴파일하여 바이트코드 생성 (.class 파일)
    3. java 명령어로 JVM에서 바이트코드 실행
  • 컴파일되면 주석이나 공백은 사라지고, 자바 소스코드의 구조가 바이트코드로 변환됨

  • IDE와 자바
    • 인텔리제이를 통한 자바 설치 관리
      • 직접 설치해도 되긴 하는데…
    • 인텔리제이를 통한 자바 컴파일 및 실행 과정
      • 자바 코드를 컴파일하려면 javac를 사용해야 하지만, 인텔리제이에서는 이를 자동으로 처리해줌
      • 인텔리제이 화면의 out 폴더에서 컴파일된 .class 파일을 확인할 수 있음
      • 원래 자바를 실행하려면 java 명령어를 사용해야 하고, 컴파일된 .class 파일을 지정해야 하지만.. 두가지 한번에 인텔리제이가 진행해준다

자바와 운영체제 독립성

  • 일반적 프로그램
    • 다른 운영체제에서 실행할 수 없다(종속적)
  • 자바 프로그램
    • JVM이 설치된 모든 운영체제에서 실행 가능(독립적)
    • 자바의 “Write Once, Run Anywhere” 철학을 구현

자바 개발과 운영 환경

  • 개발 환경으로는 윈도우나 맥을 사용하고, 서버는 리눅스를 주로 사용한다
    • 자바의 운영체제 독립성 덕분에 각 환경에 맞추어 자바 설치가 가능함

변수

  • 패키지
    • 자바 클래스들을 그룹화하는 논리적 단위
    • 패키지 첫줄에 소속된 패키지를 선언해야 함
    • 자바 파일이 위치하는 경로와 패키지 구조가 일치해야 함
  • 정수를 보관할 수 있는 이름이 x라는 데이터 저장소를 만들어 이걸 변수라고 함
    • 변수 선언 및 변수 초기화를 진행했음.
      • 초기화하지 않고 사용하면 컴파일 에러
    • ”=”은 오른쪽의 값을 왼쪽에 저장한다는 의미
    • System.out.println(x)는 변수에 저장되어있는 값을 읽어 사용하였음
    • 이는 실행 시점에 읽어서 사용하는 것이고, 변수의 값을 읽는다고 변수의 값이 없어지는 것도 아니며 반복해 읽을 수 있음.
    • 변수는 값을 변경할 수 있지만, 상수는 값을 변경할 수 없음. 상수는 final 키워드를 사용하여 선언함.
    • 변수는 메모리의 특정 위치에 값을 저장하는데, 변수의 이름은 그 위치를 참조하는 역할을 함.
    • 변수에 값을 할당하면 그 값이 메모리에 저장되고, 변수 이름을 통해 해당 값을 읽거나 변경할 수 있음.
  • 지역 변수는 직접 초기화를 진행해야 함!
    • 클래스 변수와 인스턴스 변수는 자바가 자동으로 초기화를 진행함
  • 컴파일 에러는 자바 문법에 맞지 않을때 발생하는 에러
  • 런타임 에러는 프로그램이 실행되는 동안 발생하는 에러

변수 타입

  • int, long, float, double, boolean, char 등 다양한 데이터 타입이 존재함
  • 각 데이터 타입은 메모리에서 차지하는 크기와 표현할 수 있는 값의 범위가 다름
  • 자바는 정적 타입 언어이므로, 변수 선언 시 데이터 타입을 명시해야 함
  • 자바는 기본적으로 8가지의 원시 타입(primitive type)을 제공함
    • 정수형: byte, short, int, long
    • 실수형: float, double
    • 문자형: char
    • 논리형: boolean
  • 원시 타입은 객체가 아니며, 값 자체를 저장함
  • 참조 타입(reference type)은 객체의 주소를 저장하며, 클래스, 인터페이스, 배열 등이 참조 타입에 해당함
  • 자바는 자동으로 타입 변환을 지원하지만, 명시적 타입 변환이 필요한 경우도 있음
    • 예를 들어, int에서 long으로는 자동 변환이 가능하지만, long에서 int로는 명시적 변환이 필요함
  • 자바는 타입 안전성을 보장하기 위해 컴파일 시점에 타입 검사를 수행함

++ command + d로 줄 복제 가능한 것 첨알았따.. ㅎㅎ

리터럴

  • 개발자가 직접 적은 고정된 값을 리터럴이라고 함
  • 변수의 값은 변할 수 있으나 리터럴은 고정된 값이므로 변하지 않는다.

변수 타입

  • var5 (실습)
  • 20억 넘어가면 long 쓰기~!
    • 대문자 L 및 소문자 l 모두 long 리터럴을 나타내지만, 소문자 l은 숫자 1과 혼동될 수 있으므로 대문자 L을 사용하는 것이 좋음
  • 정수 리터럴은 int를 기본적으로 사용함
  • 실수 리터럴은 double을 기본적으로 사용함

실무에서 거의 사용하지 않는 타입

  • byte, short, float는 메모리 절약이 필요한 경우를 제외하고는 실무에서 거의 사용되지 않음
    • byte는 -128부터 127까지의 정수를 저장하기 때문이다. 다만, 파일을 바이트단위로 다루며 파일 전송이나 복사등에 주로 사용한다
    • short는 표현 길이가 너무 작으며 자바는 기본으로 4byte를 기준으로 효율적 계산하도록 설계되어 있다.
    • float는 double보다 정밀도가 낮아 실무에서는 거의 사용되지 않음. 특히 금융 계산과 같이 높은 정밀도가 필요한 경우에는 double이 선호됨
    • char로 문자 하나를 표현하는 일이 잘 없으며, String을 사용해도 문자 하나를 표현할 수 있기 때문에 char도 실무에서 거의 사용되지 않음
  • 실무에서는 int, long, double, boolean, char를 주로 사용함

  • 메모리 용량은 매우 저렴하므로 용량 절약보다는 개발 효율이나 속도를 높이는 것이 더 효과적이다

실무에서 주로 사용하는 타입

  • 정수형: int, long
  • 실수형: double
  • 논리형: boolean
  • 문자형, 열: String

변수 명명 규칙

  • 규칙과 관례의 차이점
    • 규칙은 반드시 지켜야 하는 것, 관례는 지키는 것이 좋지만 반드시 지켜야 하는 것은 아님
    • 근데 전세계 개발자가 관례를 따라서 사실상 규칙임
  • 규칙 (컴파일 오류 발생)
    • 숫자로 시작 불가능
    • 공백 불가능
    • 예약어 불가능(예: int, class, if 등 자바에서 이미 사용되는 단어)
    • 영문자, 숫자, 달러기호 혹은 밑줄 사용 가능
  • 관례
    • camelCase 사용
      • 첫 단어는 소문자로 시작하고, 이후 단어의 첫 글자는 대문자로 시작하는 방식
      • 이름에 공백을 넣지 않고도 여러 단어를 쉽게 구분하도록 함

자바 언어 관례 정리

  • 클래스는 대문자, 나머지는 소문자 + 카멜 케이스
  • 예외
    • 상수는 모두 대문자 + 언더스코어
    • 패키지는 모두 소문자
  • 변수명은 의미있게 작성하는 것이 중요함
    • 예시: int x; 보다는 int age;가 더 명확함
    • 변수명은 해당 변수가 무엇을 나타내는지 쉽게 이해할 수 있도록 작성해야 함

태그:

카테고리:

업데이트: