ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (4주차 23일) Java 기초, 변수의 자료형
    수업 내용 정리 2024. 6. 4. 17:37

    자바(Java)

    > JVM(Java Virtual Machine)

    • Windows, Linux, MacOS와 같은 운영체제(OS)에서는 자바 프로그램을 직접 실행할 수 없으며 JVM을 통해 자바 프로그램을 실행할 수 있다.
    • JVM은 JDK(Java Development Kit) 또는 JRE(Java Runtime Environment)를 설치하면 자동으로 설치되는데 JDK와 JRE는 운영체제에 별로 제공되고 운영체제에 맞게 설치해야 한다.
    • JVM이 설치된 환경에서 자바 프로그램을 실행하기 때문에 개발자는 운영체제와 상관없이 자바 프로그램을 개발할 수 있다.

    > Eclipse 단축키 설정 참고

    • Mac 환경에서 실리콘 칩부터는 command+space 단축키가 제대로 작동하지 않는다고 해서 Content Assist 키를 option+space 키로 변경해 주었다.
     

    맥OS, 맥북에서 이클립스 syso 단축키 등록 하는법

    맥OS, 맥북에서 이클립스 syso 단축키 등록 하는법 안녕하세요 청 입니다. 요즘 코딩 공부 열심히 하고 ...

    blog.naver.com

    • 단축키 모음
     

    [Eclipse] 이클립스 단축키 모음 (윈도우/맥)

    [Eclipse] 이클립스 단축키 모음 & 추가 정보 윈도우와 맥 키보드 Run / 실행 소스 네비게이션 문자...

    blog.naver.com

     

    > 변수(Variable)

    • 자료형: 저장될 데이터의 타입으로, 저장하고자 하는 값의 종류에 맞게 기술해야 한다.

    • 변수의 명명 규칙
      1. 영어 대소문자가 구분되며 문자 수의 제한이 없다.
      2. 숫자로 시작하면 안 된다.
      3. 특수문자는 '_'와 '$'만 허용한다.
      4. 여러 단어로 조합된 변수의 이름은 첫 시작 글자는 소문자로 하고 조합되는 단어의 첫 글자를 대문자로 하는 것이 관례이다.
      5. 의미 있는 이름을 지어주는 것이 좋다.
      6. 예약어를 사용하면 안 된다. (class, int, new, null 등)
    • 변수의 초기화
      1. 초기값: 변수를 선언하고 처음 저장되는 값
      2. 초기화: 변수에 초기값을 대입하는 것
      3. 지역변수(메소드 안에 선언된 변수)를 사용하려면 반드시 초기화되어야 한다.
    • 문자열
      1. 자바에서 단어나 문장을 문자열이라고 한다.
      2. 문자열을 저장할 때는 String 타입을 사용하는데 String은 클래스 타입으로 String 타입의 변수는 참조 변수이다.
    String str = "오리";
    String str = new String("오리");
    String str = "오리" + "꽥꽥"; // 문자열 연결 연산
    String str = new String("오리" + "꽥꽥");

     

    > 메모리 사용 영역

    • 메소드 영역: JVM이 시작할 때 생성되고, 모든 스레드가 공유하는 영역
    • 힙 영역: 객체와 배열이 생성되는 영역
    • JVM 스택 영역
      1. 메소드를 호출 할 때마다 프레임을 추가하고, 메소드가 종료되면 해당 프레임을 제거하는 동작을 수행.
      2. 프레임 내부에는 로컬 변수 스택이 있는데, 기본 타입 변수와 참조 타입 변수가 추가되거나 제거됨.
      3. 스택 영역에 변수가 생성되는 시점은 초기화될 때, 즉 최초로 변수에 값이 저장될 때.
      4. 변수는 선언된 블록 안에서만 스택에 존재하고, 블록을 벗어나면 스택에서 제거됨.

    > 자료형

    package com.beyond.variable;
    
    import com.beyond.variable.practice.A_Variable;
    import com.beyond.variable.practice.B_ConsoleOutput;
    
    public class Application {
        /*
         * 주석(Comment)
         * 	- 소스 코드와는 무관하고, 코드로 인식되지 않는다.
         *	- 주로 코드에 대한 설명을 작성할 때 사용한다.
         */
        // 한 줄 주석
    
        // main 메소드는 프로그램의 시작점으로
        // java.exe가 Application.class를 실행시킬 때 제일 먼저 실행되는 메소드이다.
    
        // 클래스 명은 자바 파일명과 동일해야 한다.
        public static void main(String[] args) {
            // opt + 방향키: 선택된 범위 위/아래 방향으로 이동
    
            /** 1) 실행할 메소드가 있는 클래스를 생성(new)한다.
             *  [표현법]
             *	 클래스명 변수명 = new 클래스명();
             */
    
            //1-1) import 문을 사용하지 않고 클래스 생성
            //com.beyond.variable.practice.A_Variable variable = new com.beyond.variable.practice.A_Variable();
    
            //1-2) import 문을 사용하는 경우(Command+shift+O)
            A_Variable variable = new A_Variable();
            B_ConsoleOutput Output = new B_ConsoleOutput();
    
            /** 2) 생성한 클래스로 메소드 실행(호출)
             * [표현법]
             * 	변수명.메소드명();
             */
            //variable.variableTest();
            //variable.autoCasting();
            //variable.casting();
            //variable.practice();
    
            Output.valuePrint();
        }
    
    }
    package com.beyond.variable.practice;
    
    public class A_Variable {
        /**
         * 변수의 선언
         * 변수명: 카멜 표기법
         * [표현법]
         *  자료형 변수명;
         */
        public void variableTest() {
            // 논리형(boolean)
            boolean isTrue;
    
            // 정수형
            byte bNum; //(-128 ~ 127)
            short sNum; //-32,768 ~ 32,767
            int iNum; //-2,147,483,648 ~ 2,147,483,647
            long lNum; //-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
    
            // 실수형
            float fNum; //±1.4E-45 ~ 3.4E38
            double dNum; //±4.9E-324 ~ 1.8E308
    
            // 문자형
            //char ch;
            //char ch = 'A';
            //char ch = 0;
            //char ch = '\u0000';
            //char ch = -90;
            char ch = 'a';
    
            System.out.println("ch: " + ch);
            System.out.println();
    
            // 문자열
            //String name; : 문자열을 가리킬 수 있는 참조 변수를 선언
            //String name = ""; : 빈 문자열로 초기화
            //String name = new String("현지");
            String name = null;
            System.out.println("name: " + name);
            System.out.println();
    
            // 지역 변수를 생성 후 초기화가 되지 않은 경우 오류 발샏
            // System.out.println(isTrue);
            isTrue = false; // 선언 후 초기화
            // isTrue = 1; : 에러 발생
            System.out.println("" + isTrue); // 문자열을 결합하는 경우, 문자형으로 형변환 발생
            System.out.println();
    
            //bNum = 128; : 바이트 범위 초과 에러 발생
            bNum = 127;
            sNum = 32000;
            iNum = 234567991;
            // lNum = 9223372036854775807; : 리터럴은 정수형이므로, int 범위를 벗어나는 경우 오류 발생
            // long 타입의 리터럴은 숫자 뒤에 L 또는 l을 입력해야 한다.
            lNum = 9223372036854775807L;
    
            System.out.println("bNum: " + bNum);
            System.out.println("sNum: " + sNum);
            System.out.println("iNum: " + iNum);
            System.out.println("lNum: " + lNum);
            System.out.println();
    
            // float 타입의 리터럴에서 숫자 뒤에 F또는 f를 입력해야 한다.
            fNum = 3.141592F;
    
            // dNum = 3.14D;
            dNum = 3.14;
    
            System.out.println("fNum: " + fNum);
            System.out.println("dNum: " + dNum);
            System.out.println();
    
            /**
             * 변수의 명명 규칙
             * 1) 대소문자 구분
             * 2) 숫자로 시작하면 안 된다.
             * 3) 특수문자는 _, $만 사용 가능하다.
             * 4) 예약어를 사용하면 안 된다.
             */
            int number;
            int NUMBER;
            //String number: 자료형이 달라도 변수명이 같으면 에러 발생
    
            // int 1age;
            int a1g2e3;
    
            int _age;
            //int %age;
    
            //int double;
            //int public;
        }
    
        /**
         * 자동 형 변환
         * - 데이터 표현 범위가 작은 자료형을 큰 자료형으로 변환한다.
         */
        public void autoCasting() {
            byte bNum = 10;
            short sNum = 12;
            int iNum = sNum; //short -> int 자동 형 변환
            long lNum = iNum; //int -> long 자동 형 변환
            float fNum = lNum; //long -> float 자동 형 변환: float 타입이 표현 가능한 수의 범위가 더 크기 때문
            double dNum = fNum;
            //iNum = dNum; :double -> int로 변환은 자동 형 변환이 일어나지 않음
    
            System.out.println("dNum = " + dNum);
            System.out.println("sNum = " + sNum);
            System.out.println("iNum = " + iNum);
            System.out.println("lNum = " + lNum);
            System.out.println("fNum = " + fNum);
            System.out.println("dNum = " + dNum);
    
            char ch = '현';
            iNum = ch;
            System.out.println("iNum = " + iNum); //유니코드값 출력
            System.out.println();
    
            double result = 12 + 3.3; // 12.0 + 3.3 = 15.3을 result에 대입
            System.out.println("result = " + result);
            // byte, short 타입의 데이터는 연산 시 무조건 int 타입으로 변환 후 처리된다.
            int result2 = bNum + sNum;
            System.out.println("result2 = " + result2);
    
            long result3 = 30 + 30; // 30 + 30 = 60, 60을 long 타입으로 변환 후 대입(60L)
            long result4 = 30 + 30L; // 30L + 30L = 60L
            System.out.println("result4 = " + result4);
        }
    
        /**
         * 강제 형 변환
         * [표현법]
         *  (자료형) 데이터;
         */
        public void casting() {
            double dNum = 4.234567893456789;
            float fNum = (float)dNum;
            int iNum = (int)fNum;
            System.out.println("dNum = " + dNum);
            System.out.println("fNum = " + fNum);
            System.out.println("iNum = " + iNum);
            System.out.println((byte)290);
            System.out.println();
    
            int sum = iNum + (int)dNum;
            System.out.println("sum = " + sum);
    
        }
    
        /**
         * 실습 문제
         * 홍길동: 국어 60점, 영어 70점, 수학 66점
         * 총점과 평균을 출력하시오.
         *
         * 출력)
         * 국어 점수: 60점
         * 영어 점수: 70점
         * 수학 점수: 66점
         *
         * 총점: 196점
         * 평균: 65.33점
         */
        public void practice() {
            final int kor = 60; //final: 초기화를 한 번 하면, 값을 변경할 수 없음
            int eng = 70;
            int math = 66;
    
            int sum = kor + eng + math;
            double avg = sum / 3.0;
    
            System.out.printf("국어 점수: %d점\n", kor);
            System.out.printf("영어 점수: %d점\n", eng);
            System.out.printf("수학 점수: %d점\n\n", math);
            System.out.println("총점: " + sum + "점");
            System.out.println("평균: " + avg + "점");
    
        }
    }
    package com.beyond.variable.practice;
    
    public class B_ConsoleOutput {
        public void valuePrint() {
            /** System.out.print()
             * () 안의 값을 콘솔에 출력해 주는 메소드
             * 줄바꿈은 일어나지 않는다.
             */
            System.out.print("안녕하세요.");
            System.out.print(12345);
            System.out.print(false);
            //System.err.print("에러입니다.");
            System.out.println();
    
            /** System.out.println()
             * print 메소드와 동일하게 출력하는 메소드로
             * 출력 후 자동으로 줄바꿈을 해주는 메소드
             */
            System.out.println("안녕하세요.");
            System.out.println(12345);
            System.out.println(false);
    
            /** System.out.printf()
             * 정해져 있는 서식에 맞춰서 그 서식에 맞는 값을
             * 줄바꿈하지 않고 출력해 주는 메소드
             *
             ** 서식 지정자
             * %d: 정수형, %f: 실수형, %b: 논리형
             * %c: 문자형, %s: 문자열
             *
             ** escape 문자
             * \n: 줄바꿈, \t: 수평 탭
             * \": 큰 따옴표 출력, \': 작은 따옴표 출력, \\: \ 출력
             */
            System.out.printf("%d\n", 10);
            System.out.printf("%d + %d = %d\n", 10, 20, (10 + 20));
            System.out.printf("%.2f\t%.3f\n", 3.14, 4.123455555);
            System.out.printf("%c %s\n", 'A', "\"Hello\"");
        }
    }