TIL/Java

TIL 2024-10-08 (Java 문법 종합반)

myoma 2024. 10. 8. 20:48

1.  간단한 용어 정리

  • 데이터 : 컴퓨터가 정보를 담는 자료값
  • 데이터 타입(자료형) : 데이터의 유형 
  • 자료구조 : 데이터 여러개를 분류해서 담을 수 있는 분류통
  • 문맥 : 문맥이라 함은 개발언어로 표현한 프로그램의 동작 흐름을 의미합니다. 이케아 가구 조립 설명서, 밀키트 요리 레시피에 조건에 따른 문백이 있듯이 프로그램도 문맥을 가지고 있습니다.
  • 메서드 : 데이타와 문맥을 감싸는 포장지.
  • 공통 실행환경 : 여러 기기의 운영환경에서 실행 할 수 있도록 판을 깔아주는 실행 환경.
  • 운영 체제 : 기기가 프로그램을 실행시키는 운영환경(Window, iOS 등)

 


 

2.  Java 를 배워야 하는 이유.

  • Java는 공통 실행환경이 있어서 여러 기기에서 실행 가능.
    • 앱 개발에 적합하며, 여러 기기의 운영 체제에서 시랭 가능,
  • Java는 자바는 세상과 닮아있는 개발언어라 코드를 이해하기 쉽고 유지 보수 가능.
    • 클래스를 통해 객체를 만든다.
  • 안정성이 높아서 프로그래밍 오류를 방지하고 보안상 안전.
    • 변환기가 먼저 오류를 체크하며 지원하는 보안 기술이 많다.
  • 대규모 앱 개발이 가능.
    • 네트워크 및 DB 연결 및 통신 등의 작업을 처리하는 API 제공.
  • 배우면 다양한 개발 도구와 라이브러리를 사용 할 수 있다.

 


3.  JVM?

  • 자바 가상 머신 ( Java virtual machine)
    • 여러가지의 기기 위에 JAVA 프로그램을 실행시킬 수 있는 가상의 기기를 만들어주는 것을 의미.

 

 

  • 바이트 코드 - Java 프로그램 변환코드
    • 내가 작성한 코드가 운영체제가 읽을 수 있는 코드로 Java 컴파일러가 변환한 코드
  • 인터프리터 - java .class 코드 해석기
    • 운영체제가 읽은 바이트 코드를 기기가 실행할 수 있는 기계어로 번역
  • JIT 컴파일러 - 빠른 java .class 코드 해석기
    • 인터프리터의 효율을 높여주는 서포터 해석기
  • 메모리 영역 - java 데이터를 저장하는 영역
    • 운영체제로 부터 JVM이 할당받는 메모리 영역
  • 클래스 로더 - java .class 바이트 코드를 메모리 영역에 담는 운반기
    • JVM으로 class를 불러와서 메모리에 저장함
  • 가비지 컬렉터 - java 쓰레기 청소기
    • 메모리 영여게서 안쓰는 데이터를 주기적으로 흡수해가는 청소기

 

 


 

4.  래퍼 클래스 변수.

  • 래퍼 클래스(Wrapper Class) 라는 말 그대로 "기본형 변수를 클래스로 한 번 랩핑(감싸는) 변수" 라고 생각.
    • 기본형 변수 타입명에서 첫글자를 대문자로 바꾸어서 래퍼 클래스를 정의해주었다.
    • 박싱 VS 언박싱
      • 기본 타입에서 래퍼 클래스 변수로 변수를 감싸는 것을 "박싱" 이라고 부르며
      • 래퍼 클래스 변수를 기본 타입 변수로 가져오는 것을 "언박싱" 이라고 부른다. 
// 박싱 VS 언박싱

// 박싱
// Integer 래퍼 클래스 num에 21의 값을 저장.
int number = 21;
Integer num = new Integer(number);

// 언박싱
int n = num.intValue(); // 래퍼 클래스들은 intValue() 같은 언박싱 메서드들을 제공해줍니다.

 

 


 

5.  HomeWork - 1_week (요리 레시피 메모장 만들기)

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

 

완성 코드 )

import java.util.Scanner;

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

        Scanner scanner = new Scanner(System.in);
        System.out.println("제목을 입력하시오 : ");
        String title = scanner.nextLine();

        System.out.println("별점을 주세요 (1~5)");
        String stars = scanner.nextLine();
        float floatStars = Float.parseFloat(stars);

        System.out.println("내용을 입력하시오.");

        String text1 = scanner.nextLine();
        String text2 = scanner.nextLine();
        String text3 = scanner.nextLine();
        String text4 = scanner.nextLine();
        String text5 = scanner.nextLine();
        String text6 = scanner.nextLine();
        String text7 = scanner.nextLine();
        String text8 = scanner.nextLine();
        String text9 = scanner.nextLine();
        String text10 = scanner.nextLine();

        int intStars = (int)floatStars;

        System.out.println("[" + title + "]");
        System.out.println("별점 : " + stars + "(" + intStars * 100 / 5.0 + "%)");
        System.out.println("1. " + text1);
        System.out.println("2. " + text2);
        System.out.println("3. " + text3);
        System.out.println("4. " + text4);
        System.out.println("5. " + text5);
        System.out.println("6. " + text6);
        System.out.println("7. " + text7);
        System.out.println("8. " + text8);
        System.out.println("9. " + text9);
        System.out.println("10. " + text10);

    }
}

 

1주차에선 아직 포문 배우지 않아 사용하지 않았다.

문제에서도 10문항이라고 주어진 것을 보아 그냥 복붙으로 하라고 의도한 것 같았다.

숙제 도중 문제가 발생.

  • float stars = sc.nextFloat(); 으로 별점을 받고 엔터를 치는데 엔터가 다음 nextLine으로 입력되어 text1이 빈 칸으로 출력.
    • 해결 방법_1 :  nextFloat(); 아래에 nextLine(); 을 하나 만들어주기
    • 해결 방법_2 : String stars = scanner.nextLine(); float floatStars = Float.parseFloat(stars); 으로 새로 작성.
      • 순서만 반대로 되었다고 이해하면 좋음. 처음 숫자를 문자열로 받고 그 다음 형변환을 통해 다시 float으로 변환.