자바 문법 종합반

more·2023년 5월 22일

자바 문법 종합반

목록 보기
1/4

1주차

  • 언어의 역사
    - A언어 : 입/출력, 문맥 기능만 구현가능한 언어, 첫번째 개발 언어여서 A언어
    - B언어 : 데이터를 담을 수 있는 타입이 생기고, 데이터를 연산하고 묶어서 관리할 수 있는 메서드 구현이 가능한 언어, Bell사에서 만들어서 B언어
    - C언어 : 다양한 데이터 타입을 정의하고 자료구조에 담을 수 있는 언어, B언어보다 더 좋은 언어라고 해서 C언어
    - Java : C언어 기능 + 공통 실행환경(JVM), 클래스, 객체, 어디서나 마시는 커피처럼 어디서나 동작 가능한, 자바 커피에서 이름을 따서 만듬
    그림으로 정리

  • 자바의 장점
    1. 공통 실행환경(JVM)이 있어서 여러 기기에서 실행 가능
    - 각각의 컴퓨터 환경에 따라 다른 운영체제 (Window, iOS, Linux 등등) 를 가지고 있어도 그 운영체제 위에서 동일하게 실행 할 수 있음
    - 앱 개발에 유용 -> Mobile App, Server App 등등
    2. 세상과 닮아있는 개발언어라 코드를 이해하기 쉽고 유지 보수가 쉽다. - > 객체 지향 언어
    - 객체(Object)? 세상에 존재하는 모든것. 사물이나 생명체 등. => 특징(성격, 색깔, 크기 등)과 행동(움직임)을 가지고 있다.
    3. 안정성이 높아서 프로그래밍 오류를 방지하고 보안상 안전
    - Java 언어로 작성된 문맥을 바이트 코드로 변환하는 변환기(Compiler)가 먼저 오류를 체크
    4. 대규모 앱 개발이 가능 (요새는 Kotlin을 많이 사용함)
    - 네트워크 및 데이터베이스 연결 및 통신 등의 작업을 처리하는 API를 제공
    5. 다양한 개발 도구와 라이브러리를 사용
    - 많은 사람이 사용한다 -> 언어가 발전한다 -> 다양한 라이브러리가 만들어진다. (third party)

  • JVM (Java Virtual Machine)
    - 자바가 구동 될 수 있는 가상의 환경을 만들어 준다. -> 여러가지의 기기위에 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어주는것을 의미 (PC, Mobile, Server 전부 가능)

    - 없으면 각각의 환경마다 따로 설정을 해주어야한다.

    • 바이트 코드 : 운영체제가 읽을 수 있는 코드
    • Java 컴파일러 : 작성한 Java 코드들(.java 파일)을 운영체제가 읽을 수 있는 바이트 코드(.class 파일)로 변환하는 변환기
    • 인터프리터 : 운영체제가 읽은 바이트 코드를 기기(기계)가 실행할 수 있는 기계어로 번역 (Java .class 코드 해석기)
    • JIT 컴파일러 (Just In Time) : 인터프리터의 효율을 높여주는 서포터 해석기
    • 메모리 영역 : 자바의 데이터를 저장, 기억하는 영역 -> 운영체제로 부터 JVM이 할당받은 메모리 영역
    • 클래스 로더 : Java .class 바이트 코드를 메모리 영역에 담는 운반기 (load : 짐)
    • 가비지 컬렉터 : 메모리 영역에서 안쓰는 데이터를 주기적으로 흡수해가는 청소기 -> 객체가 사용되고 이제 필요가 없을 때 사용
  • JRE (Java Runtime Environment)
    - .class 파일만 실행 가능
    - JDK 가 javac 명령을 통해 .java 파일을 실행가능한 .class 파일로 변환

  • JDK (Java Development Kit)
    - .java 파일들을 .class 파일들로 변환해주는 Java Compiler(javac) 기능이 있다.
    - 코드를 디버깅하는 jdb 등의 기능이 있다.
    - 즉, 컴파일러 기능 + JRE 기능 + 디버깅 기능을 가지고 있다.

  • 변수 (변할 수 있는 저장 공간 <-> 상수 : 변하지 않는 저장 공간)
    - 타입 : 저장공간의 종류 (int, String, char 등)
    - 이름 : 저장공간의 이름 (변수 이름)
    - 초기화 : 선언과 동시에 저장 (선언 동시에 할당)
    - 덮어쓰기 : 선언 이후에 값을 저장 (선언하고 나중에 할당)
    - ex) int number = 10; -> 초기화
    - ex) int number; number = 10; -> 덮어쓰기

  • 기본형 변수 (원본 값이 Stack에 저장)
    - 논리형 변수 : boolean -> True/False 값만 저장

    • 문자형 변수 : char -> ‘A’, ‘1’ 와 같은 문자 하나만 저장
    • 정수형 변수 : byte, short, int, long -> 정수형 숫자값을 저장 ->
      byte : -128 ~ 127 범위의 숫자만 저장 가능
      short (2byte) 는 -32,768~32,767 범위의 숫자만 저장 가능
      int (4byte) 는 -21억~21억 범위의 숫자만 저장 가능
      long (8byte) 은 9백경 정도의 매우 큰수를 저장 가능 (뒤에 접미사 L 붙임으로 int와 구별)
    • 실수형 변수 : float, double -> 소수점 실수값을 저장
      float (4byte) : 3.4 -10^38 ~ 3.4 10^38(long 보다 큼, 접미사 f)
      double (8byte) : 1.7 -10^308 ~ 1.7 10^308(long 보다 큼)
  • 참조형 변수 (원본 값이 Heap 저장)
    - 문자열 변수 : String -> 문장을 저장
    - 그 외 : Object, Array, List … -> 객체, 배열, 리스트와 같은 단일 저장공간에 담을 수 없는 값
    - 실제 값이 아니라 원본 값의 주소 값을 저장한다.

  • 래퍼 클래스 변수 (기본형 변수를 클래스로 한번 랩핑(감싸는) 변수)
    - 박싱: 기본 타입에서 래퍼 클래스 변수로 변수를 감싸는 것
    - 언박싱 : 래퍼 클래스 변수를 기본 타입 변수로 가져오는 것

  • 문자 (char)

    • 문자 뒤에 \0(널문자)가 없습니다.
      (1 byte 만 쓰기 때문에 끝을 알아서 데이터만 저장하면 됩니다.)
  • 문자열 (String)
    - 문장의 끝에 \0(널문자)가 함께 저장이 됩니다.
    (몇개의 byte 를 쓸지 모르기 때문에 끝을 표시해야 합니다.)
    => C언어에서도 char랑 char 배열에서 char 배열의 마지막에는 \0문자가 들어감

  • 비트&바이트
    변수는 그릇이라고 지칭한 Byte에 나누어서 저장
    Byte는 8개의 Bit로 구성.
    - Bit
        - Bit : 0,1 형태의 2진수 데이터로써 컴퓨터가 저장(표현)할 수 있는 최소 단위 
        - 정수형 값 : 10진수 숫자(0~10범위의 숫자)이며 2진수(0~1범위)Bit 로 저장(표현) 합니다.
        - 4개의 Bit로 16진수 숫자(0~F(16)범위의 숫자)를 2진수(0~1범위)Bit 로 저장(표현) 합니다.
           
            
    - Byte = 8 Bit
        - Byte(바이트)는 8개의 Bit(비트)로 구성
        - 1 Byte 내에서 숫자 변수는 Bit 2진수를 10진수로 저장(표현)
            - 10진수로는 0~255(2의8승)까지 저장(표현)
        - 1 Byte 내에서 문자 변수의 경우만 Bit 2진수를 16진수로 저장(표현)
        
        
  • 형변환
    - 앞에 접미사로 타입을 붙여준다.

    • ex) double num = 1.210101; int number = (int)num;
  • 자동 형변환 (형변환을 직접적으로 캐스팅하지 않아도 자동으로 형변환)
    1) 자동 타입변환은 작은 크기의 타입에서 큰 크기의 타입으로 저장될때 큰 크기로 형변환이 발생합니다.

    변수 타입별 크기 순서 :

    byte(1) → short(2) → int(4) → long(8) → float(4) → double(8)

    2) 작은 크기의 타입이 큰 크기의 타입과 계산될때 자동으로 큰 크기의 타입으로 형변환이 발생합니다. (소수점이 버려짐)

  • 자동 형변환 vs 강제 형변환
    - 작은 타입 => 큰 타입 형변환시 (자동 형변환)

    • 더 큰 표현범위를 가진 타입으로 변환되는것이라 값의 손실이 없다.
    • 값의 손실없이 변환이 가능하기 때문에 컴파일러가 자동으로 형변환
      - 큰 타입 => 작은 타입(강제 형변환 = 캐스팅)
    • 더 작은 표현범위를 가진 타입으로 변환된는것이라 값의 손실
    • 값의 손실이 생기기 때문에 자동으로 형변환을 해주지 않고 개발자가 선택하여 형변환

    HW1. 요리레시피 메모장 만들기

  • 입력값
    • 내가 좋아하는 요리 제목을 먼저 입력합니다.
    • 요리 별점을 1~5 사이의 소수점이 있는 실수로 입력해주세요. (ex. 3.5)
    • 이어서 내가 좋아하는 요리 레시피를 한 문장씩 10문장을 입력합니다.
  • 출력값
    • 입력이 종료되면 요리 제목을 괄호로 감싸서 먼저 출력 해줍니다.
    • 이어서, 요리 별점을 소수점을 제외한 정수로만 출력해줍니다. (ex. 3)
    • 바로 뒤에 정수별점을 5점만점 퍼센트로 표현했을 때 값을 실수로 출력해줍니다. (ex. 60.0%)
    • 이어서, 입력한 모든 문장 앞에 번호를 붙여서 모두 출력 해줍니다.
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String title = sc.nextLine();
        float star = sc.nextFloat();
        sc.nextLine();
        String[] rec = new String[10];
        for (int i = 0; i < 10; i++) {
            rec[i] = sc.nextLine();
        }

        title = "[ " + title + " ]";
        star = (int)star;
        float percentage = star / 5 * 100;
        System.out.println(title);
        System.out.print("별점 : " + (int)star + " (");
        System.out.printf("%.1f", percentage);
        System.out.println("%)");
        for (int i =  0; i < 10; i++) {
            System.out.println((i + 1) + ". " + rec[i]);
        }
    }
}

0개의 댓글