본문 바로가기

내일배움캠프

Java 문법 종합반 1주차

Java라는 프로그래밍 언어는 1990년대에 처음 등장했다. Java는 C언어의 자료형 데이터 타입, 자료구조, 연산 등 다양한 프로그래밍 기능에 객체 지향 프로그래밍이라는 개념을 도입한 언어이다. 그리고 Java는 운영체제가 다른 것처럼 실행환경이 달라도 같은 실행결과를 반환하는 특징이 있다.

 

Java가 실행환경에 구애받지 않는 이유중 하나가 JVM이라고 생각한다.

JVM(Java Virtual Machine)은 자바 가상머신이라는 뜻으로 Java 프로그램을 실행시킬 수 있는 가상의 기기를 말한다. 그래서 운영체제가 달라도 JRE(Java Runtime Environment)를 설치하고 실행하면 거기에 포함된 JVM이 프로그램을 실행 시켜 주는 것이다.

JVM에는, Java 프로그램 변환 코드(java 코드->바이트 코드), Java 인터프리터, JIT 컴파일러, 메모리 영역(Stack, Heap등등..), 클래스 로더, GC(가비지 컬렉터) 등이 있다.

JDK(Java Development Kit)은 자바 개발 키트라는 뜻으로, 자바 프로그램을 개발하기 위한 도구들이 모인 환경을 말한다. JDK에는 JRE뿐만 아니라 jdb(디버그모드)와 같은 개발에 필요한 도구들이 모여있다.

변수의 의미 자체는 변하는 수라는 뜻으로 한 저장공간에 저장된 값은 언제든 변할 수 있기에 변수라는 이름이 붙었다.  Java에서 변수를 선언하는 방법은 (자료형 변수이름;)으로 선언한다.

int intNumber = 2147483647;

반대로 상수는 값이 한번 저장되면 저장공간의 값은 바꿀 수 없다. Java에서 상수는 자료형 앞에 final이라는 접두사를 붙인다.

 

final int intNumber = 2147483647;

변수의 자료형에는 기본형 변수와 참조형 변수로 나뉜다.

기본형 변수에는 boolean, char, byte, short, int, long, float, double이 있다.

boolean은 참(true)과 거짓(false) 두 가지 값만 저장할 수 있는 1byte사이즈의 변수다.

char는 한 개의 문자만 저장할 수 있는 1byte사이즈의 변수이다. 

byte, short, int, long은 모두 정수를 저장할 수 있는 자료형이고 각각 1, 2, 4, 8byte를 차지하면서 자료형별로 표현할 수 있는 값의 범위가 다르다. byte가 가장 작고, long이 가장 크다.

float와 double은 둘 다 실수를 저장할 수 있는 자료형이고 각각 4, 8byte를 차지한다. 실수 자료형은 정수 자료형에 비해 표현할 수 있는 범위가 훨씬 넓다.(이유는 부동소숫점이라는 정수형 과는 다른 방식으로 수를 표현하기 때문이다.)

https://ko.wikipedia.org/wiki/%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90

 

부동소수점 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 초기의 전기기계식 프로그래밍 가능한 컴퓨터 Z3에는 부동소수점 산술 기능이 포함되었다. (뮌헨의 국립 독일 박물관) 부동소수점(浮動小數點, floating point) 또

ko.wikipedia.org

참조형 변수는 정수나 문자같이 메모리에 값을 저장하기에 간단하지 않아서 값이 저장된 주소를 저장하고 참조하는 방식으로 사용하는 변수다. 참조형 변수는 원본 값을 Heap에 저장하고 주소만 Stack에 저장해서 필요하면 Stack에 저장된 주소로 Heap에서 불러온다.

참조형 변수에는 String, 객체, 배열, List, Array 등이 있다.

String helloWorld = "Hello world!"; // String형 여러개의 문자를 저장

System.out.println(helloWorld);

int[] a = {1, 2, 3}; // 배열
System.out.println(Arrays.toString(a)); // 배열의 값을 출력하려면 Arrays라이브러리의 toSting메소드 사용

 

Java는 자료형을 변환하는 기능을 지원한다. 변수의 자료형을 변환하고 싶으면 변수명 앞에 (char), (int)처럼 괄호치고 자료형을 적는다.

public class typeChange1 {
    public static void main(String[] args) {
        int intNumber = 10;

        double doubleNumber = (double)intNumber;
        float floatNumber = (float)intNumber;

        System.out.println("intNumber => " + intNumber); // intNumber => 10
        System.out.println("doubleNumber => " + doubleNumber); // doubleNumber => 10.0
        System.out.println("floatNumber => " + floatNumber); // floatNumber => 10.0
    }
}

만약 자료형변환이 필요하다고 판단되면 컴파일러가 자동으로 형변환하기도 하고 이를 암묵적인 형변환(Unimplicit type casting)이라고 한다.

public class typeChange2 {
    public static void main(String[] args) {
        // 자료형 표현 범위
        // byte(1byte) => short(2byte) => int(4byte) => long(8byte) => float(4byte) => double(8byte)

        byte byteNumber = 10;
        int intNumber = byteNumber; // byte -> int 암묵적 형변환됨
        System.out.println(intNumber);

        char charAlphabet = 'A';
        intNumber = charAlphabet; // char -> int로 암묵적 형변환됨
        System.out.println(intNumber);

        intNumber = 100;
        long longNumber = intNumber; // int -> long로 암묵적 형변환됨
        System.out.println(longNumber);

        intNumber = 200;
        double doubleNumber = intNumber; // int -> dobule로 암묵적 형변환됨
        System.out.println(doubleNumber);

        // 표현 범위가 작은 자료형에서 큰 자료형(차지하는 메모리가 작은 것에서 큰 것)으로 바뀔때 자동으로 형 변환됨
        // 변수에 할당하는것 말고도 두 변수끼리 연산할 때도 자료형에 따라 암묵적 형변환됨

        int intNum = 10;
        double doubleNum = 5.5;
        double result = intNum + doubleNum;

        System.out.println("plus => " + result);

        int iResult = intNum / 4; // 정수간 연산이기에 소수점은 버리고 저장함
        double dResult = intNum / 4.0; // 정수와 실수간 연산이기에 표현 범위가 작은 정수가 실수로 암묵적 형변환됨

        System.out.println(iResult + " / " + dResult);
    }
}

실습: 요리 레시피 메모장 만들기

import java.util.Scanner;

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

        String name = sc.nextLine();
        float rating = sc.nextFloat(); // nextInt(), nextFloat(), next(), 등등 next계열 메소드는 공백, 개행을 제외한 문자열이나
        //숫자만 입력받음
        sc.nextLine(); // nextLine은 공백과 개행도 입력한걸로 치기 때문에 desc1에 입력하는걸 건너뛰는 현상을 막으려면
        // sc.nextLine()을 한번 호출해 엔터키로 개행한 것을 날리고 다시 입력받아야함
        String desc1 = sc.nextLine();
        String desc2 = sc.nextLine();
        String desc3 = sc.nextLine();
        String desc4 = sc.nextLine();
        String desc5 = sc.nextLine();
        String desc6 = sc.nextLine();
        String desc7 = sc.nextLine();
        String desc8 = sc.nextLine();
        String desc9 = sc.nextLine();
        String desc10 = sc.nextLine();


        int intRating = (int) rating;
        double ratingPercent = intRating * 100 / 5 ;

        System.out.println("[" + name + "]");
        System.out.println("별점 : " + intRating + " (" + ratingPercent + "% )");
        System.out.println("1. " + desc1);
        System.out.println("2. " + desc2);
        System.out.println("3. " + desc3);
        System.out.println("4. " + desc4);
        System.out.println("5. " + desc5);
        System.out.println("6. " + desc6);
        System.out.println("7. " + desc7);
        System.out.println("8. " + desc8);
        System.out.println("9. " + desc9);
        System.out.println("10. " + desc10);
    }
}

입력
출력

 

'내일배움캠프' 카테고리의 다른 글

계산기 프로젝트  (0) 2024.04.24
Java문법 종합반 2주차  (0) 2024.04.23
사전캠프 미니미니프로젝트 회고  (0) 2024.04.19
2024-04-19일자 TIL  (0) 2024.04.19
picocss  (0) 2024.04.17