본문 바로가기
스파르타 내배캠

[TIL] #2. Java 진짜시작

by saemsaem 2024. 4. 22.


 [ Java 문법 종합반 1주차 ] 

개발 언어의 역사

A언어 : 입/출력
B언어 : A언어 + 기계식 데이터 타입, 연산기능, 메서드
C언어 : B언어 + 자료형 데이터 타입, 자료구조
Java언어 : C언어 + 공통 실행환경, 클래스, 객체

 

Java를 배워야 하는 이유

  1. 공통 실행환경이 있어서 여러 기기에서 실행 가능하다 (=: 토퍼)
  2. 코드를 이해하기 쉽고, 유지보수가 쉽다
    - ‘객체’ (object)
    - 모든 객체는 특징행동을 지님
  3. 안정성이 높아 프로그래밍 오류를 방지하고, 보안상 안전하다
    - compiler
  4. 대규모 앱 개발이 가능하다
    - API 제공
  5. 다양한 개발도구와 라이브러리 사용 가능

 

JVM

: Java Virtual Machine
: 여러가지의 기기 위에 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어 주는 것

.java → compiler → .class → JVM → Devices

compiler : [.java]파일을 [.class]파일로 변환해줌
  / .class : 바이트 코드 (운영체제가 읽을 수 있는 코드)

 

JRE

: Java Runtime Environment (자바 실행 환경)
.class 파일만 실행 가능함

 

JDK

: Java Development Kit (자바 개발 키트)
compiler 기능 + JRE 기능 + 디버깅 기능

 

변수와 상수

변수 : 변하는 저장공간
상수 : 변하지 않는 저장공간 (할당 후 값을 바꿀 수 없음)

final int number = 10;
number = 11; //바꿀 수 없는 값이기 때문에 에러가 남

 

변수 타입

  1. 기본형
    • 논리형 : boolean (true / false)
    • 문자형 : char (’a’)
    • 정수형 : byte, short, int, long
    • 실수형 : float, double
  2. 참조형
    • 문자열 : String (”Apple”)
    • 그 외 : Object, Array, List ,,,
    1. 참조형 변수 = 주소형 변수 : 참조형 변수는 실제 값이 아닌 원본값의 주소값을 저장한다. 크기가 크기 때문에 별도의 저장공간이 필요
    2. Stack 영역 vs Heap 영역
      • Stack : 정적으로 할당된 메모리 영역
      • Heap : 동적으로 할당된 메모리 영역
      • 크기를 알 수 없을 때, 크기에 맞게 늘어나기 위해 동적으로 할당됨.
  • Wrapper Class 변수 : 기본형 변수를 클래스로 한번 감싸는 변수
    • 사용 이유 : 클래스의 메서드를 사용할 수 있음

 


 

 [ 개인과제 level 1.1 - 1.5 ] 

switch

더 간단하게 작성할 수 있는 방법을 알게 되었다. (intelliJ의 자동 정렬으로..ㅎ)

switch (op) {
    case '+':
        result = a + b;
        break;
    case '-':
        result = a - b;
        break;
    case '/':
        if (b == 0) {
            System.out.println("두 번째 숫자로 0이 입력될 수 없습니다.");
        } else {
            result = (double) a / (double) b;
        }
        break;
    case '*':
        result = a * b;
        break;
}
switch (op) {
    case '+' -> result = a + b;
    case '-' -> result = a - b;
    case '/' -> {
        if (b == 0) {
            System.out.println("두 번째 숫자로 0이 입력될 수 없습니다.");
        } else {
            result = (double) a / (double) b;
        }
    }
    case '*' -> result = a * b;
}

훨씬 보기도 편하고, 깔끔해졌다.