본문 바로가기

개발 일지/TIL

[ #6 ] TIL

✏️ 0422      


Java 문법 종합반 강의_1주차

4시 튜터님 면담

5시 개인과제 발제


Java 문법 종합반_1주차

    Mingle Day 는 멀까? 노는 거라는데!

 

  • Java 공부 방향
    • Spring을 활용하기 위해서 Java 는 필수
    • Java 문법을 배우고 익혀서 내 것으로 만들기
    • 객체지향이 무엇인지 배워보고 정리하기 (필수)
    • 챕터별 어떤 방향으로 공부해야하는지 확인
  • Chapter 1
    • Java 언어에 대해 이해하기
    • JVM 에 대해서 이해하기
    • 변수와 상수에 대해서 이해하기
    • 변수를 담는 저장공간의 종류에 대해서 이해하고 사용법 익하기
    • 저장공간 종류(변수 타입)간에 변환에 대해서 이해하고 사용법을 익하기

 

Java 언어
어디서나 동작 가능한 언어
객체지향 언어
공통 실행환경(JVM), 클래스, 객체

 

  • Java의 특징
    • 여러 기기의 운영 체제에서 실행 가능
    • 코드의 이해와 유지 보수가 쉽다
    • 안정성이 높아 프로그래밍 오류를 방지하고 보안상 안정
    • 대규모 앱 개발 가능
    • 다양한 개발 도구와 라이브러리 사용 가능

 

 

JVM ( Java Virtual Machine )
자바 가상 머신
여러 가지의 기기 위에 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어주는 것

 

  • 바이트 코드
    • Java 프로그램 변환 코드
    • 작성한 코드가 운영체제가 읽을 수 있는 코드(바이드 코드)로 Java 컴파일러가 변환한 코드
  • Java 컴파일러
    • 작성한 Java 코드(.java 파일)을 운영체제가 읽을 수 있는 바이트 코드(.class 파일)로 변환하는 변환기
  • 메모리 영역
    • Java 데이터를 저장하는 영역 
    • Stack 영역(정적)과 Heap 영역(동적)으로 나눠짐
    • Stack 영역 => 기본형 변수의 값, 참조형 변수의 주소값
    • Heap 영역 => 참조형 변수(=주소형 변수)의 원값

 

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

JDK ( Java Development Kit )

자바 개발 키트
.java 파일들을 .class 파일들로 변환해주는 Java Compiler(javac) 기능 존재
JRE(JVM)의 기능을 포함

 

  • JDK 디버깅 기능
    • 코드들을 한 줄씩 객체와 메소드를 수행하면서 변수들도 변하는 과정을 볼 수 있도록 JDK는 코드를 따라가면서 변수를 볼 수 있는 디버깅 기능을 제공
    • 코드 라인에 중단점을 설정하고, 디버그 모드로 프로그램을 실행하면 중단점의 코드 라인을 수행할 때 일시정지 되면서 변수들을 볼 수 있게 도와준다

 

New Project 를 만들면 처음에 나오는 코드를 해석한 내용
// 클래스
// public : (접근)제어자, public(공공의, 공통의), 메인 클래스 라는 애를 어디까지 접근하게 할 것이냐
// ※ 주의 : 클래스의 이름은 파일의 이름과 동일해야 한다
// -> 그래야 Main.java 파일을 Main.class 로 변환할 수 있다 (과정 생각하기)
public class Main {

	// main 메소드
    // 자바 프로젝트(앱)는, 제일 먼저 클래스의 main 메소드를 실행시킨다
    // = JVM의 약속

    // output
    // static : 이 프로그램이 실행이 될 때, 무조건 실행되는 녀석임을 표현
    // void : 메서드의 출력값의 데이터 타입, "아무것도 없다" -> 출력은 없다

    // input
    // String[] args : 매개변수 자리
    // String[] : 입력에 대한 변수 타입 (문자)
    // args : 변수명
    public static void main(String[] args) {
        // 우리의 playground!

        // 객체 : 특성(속성, 변수), 행동(메소드)
        // System 이라는 class 안에 있는 out 을 통해 println(출력) 메소드를 통해서
        // 콘솔창이라는 () 안을 있는 내용으로 기능 실행
        System.out.println("Our First Project!");
  }
}

 

기본형
// 기본형
// (1) 논리형 : boolean
boolean flag = true;
System.out.println(flag);  // true

// (2) 문자형 : char
char alphabet = 'A';
System.out.println(alphabet);  // A

// (3) 정수형 : byte, short, int, long
byte byteNumber = 127; // -128 ~ 127 (1btye만 표현 가능, 8bit = 256)
short shortNumber = 32767; // -32,768 ~ 32,767
int intNumber = 10000; // -21억 ~ 21억
long longNumber = 123456789L;
System.out.println(byteNumber);  // 127
System.out.println(shortNumber);  // 32767
System.out.println(intNumber);  // 10000
System.out.println(longNumber);  // 123456789

// (4) 실수형 : float(4byte), double(8byte)
float floatNumber = 3.14f;
double doubleNumber = 3.14;
System.out.println(floatNumber);  // 3.14
System.out.println(doubleNumber);  // 3.14

 

변수 타입별 크기 순서(bit)

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

작은 크기의 타입이 큰 크기의 타입과 '계산'될 때, 자동으로 큰 크기의 타입으로 형 변환이 된다

 

참조형
// 참조형
// (1) 문자열 변수 :  String
String helloWorld = "Hello World";
System.out.println(helloWorld);  // Hello World

// (2) 배열 : Object, Array, List
int[] a = {1, 2, 3};
System.out.println(Arrays.toString(a));  // [1, 2, 3]

// 래퍼 클래스(Wrapper Class 변수)
int number = 21;
// Integer num = new Integer(number);
//  => deprecated / 지원이 종료된, 사용하지 않는 방식 / 아래처럼 적어도 실행 가능
Integer num = number;  // boxing
System.out.println(num.intValue()); // 21  // unboxing

 

⭐ 주의할 점, 문자열(String)을 쓸 때는 " " 사용 / 문자형(char)을 쓸 때는 ' ' 사용

 

 

1주차 과제

 

제목, 별점, 레시피(10행)을 입력하는 코드 짜기

강의에서 배운대로 굉장히 쉬웠다

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // .next() 를 사용할 경우, 띄어쓰기를 사용하면 다음으로 넘어간다
        String title = sc.nextLine();  // 요리 제목 입력
        float score = sc.nextFloat();  // 1 ~ 5 사이의 소수점이 있는 실수 별점 입력 (ex. 3.5)
        String sentence1 = sc.nextLine(); // 레시피 내용 입력
        String sentence2 = sc.nextLine();
        String sentence3 = sc.nextLine();
        String sentence4 = sc.nextLine();
        String sentence5 = sc.nextLine();
        String sentence6 = sc.nextLine();
        String sentence7 = sc.nextLine();
        String sentence8 = sc.nextLine();
        String sentence9 = sc.nextLine();
        String sentence10 = sc.nextLine();

        int intScore = (int)score;  // 별점 int 변환
        float percent = intScore * 100 / 5;

        System.out.println("[ " + title + " ]");
        System.out.println("별점 : " + intScore + " (" + percent + "%)");
        System.out.println("1. " + sentence1);
        System.out.println("2. " + sentence2);
        System.out.println("3. " + sentence3);
        System.out.println("4. " + sentence4);
        System.out.println("5. " + sentence5);
        System.out.println("6. " + sentence6);
        System.out.println("7. " + sentence7);
        System.out.println("8. " + sentence8);
        System.out.println("9. " + sentence9);
        System.out.println("10. " + sentence10);
        
        
        // 실행 결과
        // [ 제목 ]
        // 별점 : 4 (80.0%)
        // 1. 
        // 2. ㄱ
        // 3. ㄴ
        // 4. ㄷ
        // 5. ㄹ
        // 6. ㅁ
        // 7. ㅂ
        // 8. ㅅ
        // 9. ㅇ
        // 10. ㅈ
    }
}

 

코드에 이상은 없는 것 같은데 자꾸 score(별점)을 받고 다음 내용을 받을 때 줄바꿈이 들어간다

저걸 고치는 방법은 입력 받는 순서에서 socre 를 마지막에 받으면 해결되기는 하는데

왜 안되는 건지 궁금해서 찾아봤다

 

문제는 nextLine() 메소드를 사용할 때 발행한다

nextLine() 메소드는 줄바꿈(엔터)를 입력받기 전까지의 문자열을 반환하고 버리지 않는다!!

 

그래서 nextFloat() 메소드로 별점을 입력하고 줄바꿈(엔터)를 누른 후,

nextLine() 메소드를 호출하면 이전에 입력한 줄바꿈이 그대로 사용되어 빈 문자열을 반환하게 된다고 한다

 

어쩐지 nextFloat() 입력값을 적은 후에 줄바꿈(엔터) 말고 띄어쓰기를 사용해서

sentence1 을 적어봤는데 그럴 경우에는 잘 맞춰서 출력이 되긴 하는데

sentence1의 값 앞에 띄어쓰기(공백)이 존재하더라

 

그럼 별점 값을 받고 남아있는 줄바꿈(엔터)를 없애줘야 하는데

그건 다시 한번 nextLine() 을 사용해주면 된다.

 

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // .next() 를 사용할 경우, 띄어쓰기를 사용하면 다음으로 넘어간다
        String title = sc.nextLine();  // 요리 제목 입력
        float score = sc.nextFloat();  // 1 ~ 5 사이의 소수점이 있는 실수 별점 입력 (ex. 3.5)
        sc.nextLine(); // 코드 추가, 줄바꿈 엔터 없애기
        String sentence1 = sc.nextLine(); // 레시피 내용 입력
		// 이하 동일
    }
}

 

변수에 저장하지 않고 그대로 써버리면 없애버릴 수 있다

 

 

제대로 실행되는 것을 확인 가능!

 

Java 개인과제

    5/1(수) 오후 2시까지 제출

 

개인 과제는 계산기 만들기! 

발제 내용을 듣는데 과부화 온 탓인지 머리가 지끈거렸다

나만 그런가...? 어려웡 ㅠㅠ

 

가장 기억에 남는 건

⭐ 요구사항을 완료할 때마다 커밋을 꼭 남기는 것과

학습을 위해 소스 코드를 설명하는 주석을 작성할 것

 

Lev.2 까지만 제출해도 괜찮다고 했지만

이왕 하는거 Lev.3 도 도전해보고 싶다!

할수만있다면....

 

 

튜터님과 면담

면담일까 스몰 토크일까

 

면담에 더 가까운 것 같으니 면담이라고 하자

도움되는 말씀을 많이 해주셔서 기록하기로 했다

 

  • ⭐튜터님들께 질문하러 가기 전에 한 번 확인해보기
    • 질문을 할 때는 기본적으로 육하원칙 형식으로
    • 이게 맞는지, 틀린지에 대한 질문은 그렇게 생각한 이유도 같이 말해보기
    • 잘 모르겠는 것에 대한 질문은 그 내용에 대한 배경지식을 찾아보고 질문하기
    • 해당 부분을 모르면 어떤 부분에 대한 지식이 부족하고 필요한지도 한번 물어보기
    • 지금부터 질문하는 연습을 하면 나중에 반드시 도움이 될 것

 

질문하기 전에 생각하고 가면 좋으니 이 글을 본다면 추천한다 😊

'개발 일지 > TIL' 카테고리의 다른 글

[ #8 ] TIL  (0) 2024.04.24
[ #7 ] TIL  (2) 2024.04.23
[ #5 ] TIL  (0) 2024.04.20
[ #4 ] TIL  (0) 2024.04.20
[ #3 ] TIL  (0) 2024.04.20