Data Scientist 옌

매일 발전하는 IT문제해결사

국비지원교육 (22.01-22.07)/강의노트

22-01-28(금) 005일차 [Java] 변수와 자료형, static 키워드

옌炎 2022. 4. 9. 16:25
728x90

수업내용


1교시 (09:30-10:20)

  • 정보처리기사 중요성
  • 어제 수업 리뷰
    • 내가 사용하는 도구 잘 알기
      • 프로그램의 버전 파악
    • 자바의 범위를 줄이면서 배우고 있는데 그 범위가 대부분 예약어(키워드임)
      • package : keyword : 디렉토리를 나타냄
      • 클래스는 자바 프로그램의 최소 단위
    • 패키지도 컴파일 해야 한다.
      • javac -d . classname.java
      • java packagename.classname
    • 네임스페이스
      • 패키지도 컴파일을 해야 한다
      • 소스파일과 바이트 파일의 경로가 다를 수 있음 >> 바이트 파일이 있는 곳까지 가서 실행하면 안된다. packaganame.classname과 같이 네임스페이스로 실행
    • class : keyword
      • 자바 프로그램의 최소 단위이다.
      • 구성원은 변수와 함수이다.
      • 클래스가 메모리에 올라가면 객체가 된다.
    • 접근제한자 : keyword : 접근을 제한
      • public
      • protected
      • default
      • private
    • 변수 : 데이터를 담는 상자 << 타입을 저장해서 씀 : Type based language ← 메모리를 적게 쓰려고!
      • 문자
      • 숫자
    • 자바에서의 데이터 표현
      • 데이터의 크기가 있음
      • 데이터의 크기별 출력

2교시 (10:30-11:20)

  • 자바에서의 데이터 표현 및 주석 달기 연습
// 패키지 a.b.c.ch1을 선언한다.
// Exam_Var_Box 의 클래스를 패키지 a.b.c.ch1 하위에 두세요
// C:\00.KOSMO108\10.JExam\ch1\a\b\c\ch1\Exam_Var_Box
package a.b.c.ch1;

// java.lang 패키지에 있는 Integer 클래스를 가져와서 Exam_Var_Box 클래스에서 사용하기
// java.lang 패키지에 있는 클래스들(자원) 자바 프로그램을 만드는데 사용하는 가장 기본적인 클래스들이기 때문에
// 자바 엔진에서 import 키워드를 사용해서 불러오지 않아도 사용할 수 있게 만들어져 있다.
// java.lang.* 패키지 이외의 다른 자원은 무조건 import 키워드로 불러와야 한다.
import java.lang.Integer;

// class 키워드를 사용해서 Exam_Var_Box 일반 클래스를 선언한다.
// 접근 제한자 : Access Modifier를 public 키워드를 부여해사
// 모든 클래스에서 : 다른 패키지에 있는 클래스도 호출해서(불러서) 사용할 수 있게 한다.
// a.b.c.ch1.Exam_Var_Box
public class Exam_Var_Box {

	// 콘솔 어플리케이션의 main() 함수
	public static void main(String args[]) {
		
		// 콘솔에 "십진수 0 : 이진수로 >>> : " 문자열을 출력하시오
		// + : "십진수 0 : 이진수로 >>> : "와 Integer.toBibaryString(0) 결과를 더하세요
		// 문자열 + 숫자 = 문자열이다
		// Integer.toBinaryString(0) : java.lang 패키지에 있는 Integer 클래스
		// Integer 클래스는 숫자 중 정수를 다루는 클래스이다.
		// toBinaryString() : Integer 클래스에 있는 함수(메서드)이다.
		// toBinaryString() 함수(메서드)는 숫자로 들어오는 아규먼트를 이진수로 변환한다.
		// toBinaryString(0) : 숫자 0을 이진수로 변환한다.
		System.out.println("십진수 0: 이진수로 >>> : " + Integer.toBinaryString(0));
		// toOctalString() : Integer 클래스에 있는 함수(메서드)이다.
		// toOctalString() 함수(메서드)는 숫자로 들어오는 아규먼트를 팔진수로 변환한다.
		// toOctalString(0) : 숫자 0을 팔진수로 변환한다.
		System.out.println("십진수 0: 팔진수로 >>> : " + Integer.toOctalString(0));
		// toHexString() : Integer 클래스에 있는 함수(메서드)이다.
		// toHexString() 함수(메서드)는 숫자로 들어오는 아규먼트를 십육진수로 변환한다.
		// toHexString(0) : 숫자 0을 십육진수로 변환한다.
		System.out.println("십진수 0: 십육진수로 >>> : " + Integer.toHexString(0));
		// \n : 문자 상수이다. : 라인을 한 칸 떨어뜨린다. : 캐리지 리턴(CR) + 라인 피드(LF)
		System.out.println("\n");
		
		System.out.println("십진수 1: 이진수로 >>> : " + Integer.toBinaryString(1));
		System.out.println("십진수 1: 팔진수로 >>> : " + Integer.toOctalString(1));
		System.out.println("십진수 1: 십육진수로 >>> : " + Integer.toHexString(1));
		System.out.println("\n");

		System.out.println("십진수 2: 이진수로 >>> : " + Integer.toBinaryString(2));
		System.out.println("십진수 2: 팔진수로 >>> : " + Integer.toOctalString(2));
		System.out.println("십진수 2: 십육진수로 >>> : " + Integer.toHexString(2));
		System.out.println("\n");

		System.out.println("십진수 3: 이진수로 >>> : " + Integer.toBinaryString(3));
		System.out.println("십진수 3: 팔진수로 >>> : " + Integer.toOctalString(3));
		System.out.println("십진수 3: 십육진수로 >>> : " + Integer.toHexString(3));
		System.out.println("\n");

		System.out.println("십진수 4: 이진수로 >>> : " + Integer.toBinaryString(4));
		System.out.println("십진수 4: 팔진수로 >>> : " + Integer.toOctalString(4));
		System.out.println("십진수 4: 십육진수로 >>> : " + Integer.toHexString(4));
		System.out.println("\n");

		System.out.println("십진수 5: 이진수로 >>> : " + Integer.toBinaryString(5));
		System.out.println("십진수 5: 팔진수로 >>> : " + Integer.toOctalString(5));
		System.out.println("십진수 5: 십육진수로 >>> : " + Integer.toHexString(5));
		System.out.println("\n");

		System.out.println("십진수 6: 이진수로 >>> : " + Integer.toBinaryString(6));
		System.out.println("십진수 6: 팔진수로 >>> : " + Integer.toOctalString(6));
		System.out.println("십진수 6: 십육진수로 >>> : " + Integer.toHexString(6));
		System.out.println("\n");

		System.out.println("십진수 7: 이진수로 >>> : " + Integer.toBinaryString(7));
		System.out.println("십진수 7: 팔진수로 >>> : " + Integer.toOctalString(7));
		System.out.println("십진수 7: 십육진수로 >>> : " + Integer.toHexString(7));
		System.out.println("\n");

		System.out.println("십진수 8: 이진수로 >>> : " + Integer.toBinaryString(8));
		System.out.println("십진수 8: 팔진수로 >>> : " + Integer.toOctalString(8));
		System.out.println("십진수 8: 십육진수로 >>> : " + Integer.toHexString(8));
		System.out.println("\n");

		System.out.println("십진수 9: 이진수로 >>> : " + Integer.toBinaryString(9));
		System.out.println("십진수 9: 팔진수로 >>> : " + Integer.toOctalString(9));
		System.out.println("십진수 9: 십육진수로 >>> : " + Integer.toHexString(9));
		System.out.println("\n");

		System.out.println("십진수 10: 이진수로 >>> : " + Integer.toBinaryString(10));
		System.out.println("십진수 10: 팔진수로 >>> : " + Integer.toOctalString(10));
		System.out.println("십진수 10: 십육진수로 >>> : " + Integer.toHexString(10));

	// main() 함수를 닫는 블록
	} // end of main()

// Exam_Var_Box 클래스를 닫는 블록
} // end of Exam_Var_Box

 

3교시 (11:30-12:20)

  • [교재 39~41p] 아스키
  • 2진수, 16진수, 8진수
  • 부호비트
  • 변수 [교재 44p]
    • 자료형
    • [교재 375p] Wrapper 클래스 ← 형변환 ← 자바의 모든 자원은 객체

기초 자료형 primitive type

  • 숫자
    • 정수
      • Byte byte 1byte(8bit)
      • Short short 2byte(16bit)
      • Integer int 4byte(32bit)
      • Long long 8byte(64bit) 정수l, 정수L
    • 실수 0.0(지수부.기수부)
      : 컴퓨터는 더 세밀하게 표현하는 것을 더 크다고 본다. 정수보다 실수가 무조건 더 큼.
      • Float float 4byte(32bit) 실수f, 실수F
      • Double double 8byte(64bit) 실수d, 실수D
  • 문자
    • 문자
      • Character char 2byte(양의 정수 16bit, 문자를 다루기 때문에 음수를 가질 수 없다.)
    • 논리
      • 논리 Boolean boolean 1byte(8bit)

----------------------> 묵시적 형변환이 일어난다.

byte - char - short - int - float - double

명시적 형변환을 해야 한다. <----------------------

 

4교시 (12:30-13:20)

  • 변수의 선언과 값 할당 후 주석 달기
// 패키지 선언
package a.b.c.ch1;

// 클래스 선언
public class Exam_Var_1 {
	
	// 메인 함수 선언
	public static void main(String args[]){
		
		/*
			1. int 형 데이터 타입을 선언한다.
			2. level : int 형 데이터 타입을 사용하려고 level 변수명을 선언한다.
			3. = : 대입 연산자
			4. 10 : 정수형 10 숫자(리터럴)을 선언한다.
			5. ; : 문장을 종결하는 ; 세미콜론(기호, 연선자)를 선언한다.
		*/
		// 6. int 형 변수 level을 선언하고 값 10을 초기화 했다.

		// level 이라는 변수에 정수 자료형 int (4byte)의 공간을 선언하고 10 할당
		int level = 10;
		// level 변수명을 호출해서(불러와서) level 변수에 초기화된 데이터를 콘솔에 출력한다.
		// 변수 출력
		System.out.println(level);

		// i 라는 변수에 자료형 int (4byte)의 공간을 선언
		int i;
		/*
			System.out.println(i);
			Exam_Var_1.java:11: error: variable i might not have been initialized
					System.out.println(i):
									   ^
			1 error
		*/

		// 변수 i에 100 할당
		i = 100;
		// 변수 출력
		System.out.println(i);
	
	}  // end of main()

} // end of Exam_Var_1

5교시 (14:30-15:20)

  • byte 형
    • [교재 50p] 바이트 단위의 정보를 저장하거나 통신할 때 주로 사용합니다.
// 패키지 선언
package a.b.c.ch1;

// 클래스 선언
public class Exam_Byte {

	// main() 함수 선언
	public static void main(String args[]) {

		// Byte의 값 콘솔에 출력
		System.out.println("byte의 크기는 1 바이트 >>> : " + Byte.BYTES);
		// Byte의 크기 콘솔에 출력
		System.out.println("byte의 사이즈는 8 비트 >>> : " + Byte.SIZE);

		// byte 형 데이터 타입을 bMax 변수명을 선언하여, Byte의 최대값(127)을 할당
		byte bMAX = Byte.MAX_VALUE;
		// bMax 변수명을 호출해서 bMAX 변수에 초기화된 데이터를 콘솔에 출력 : 127
		System.out.println("byte의 최대값 :: Byte.MAX_VALUE >>> : " + bMAX);

		// byte 형 데이터 타입을 bMin 변수명을 선언하여, Byte의 최소값(-128)을 할당
		byte bMin = Byte.MIN_VALUE;
		// bMin 변수명을 호출해서 bMin 변수에 초기돠된 데이터를 콘솔에 출력 : -128
		System.out.println("byte의 최소값 :: Byte.MIN_VALUE >>> : " + bMin);

		// Byte의 최댓값인 127보다 큰 수를 할당하고자 하면 에러가 남
		// byte b_1 = 128;
		// System.out.println("b_1 >>> : " + b_1);

		// Byte의 최솟값인 -128보다 작은 수를 할당하고자 하면 에러가 남
		// byte b_2 = -129;
		//System.out.println("b_2 >>> : " + b_2);
	
	} // end of main()

} // end of Exam_Byte

6교시 (15:30-16:20)

  • 메모리에 관여하는 키워드
    • static: static을 쓰면 버추얼 머신이 메모리에 올려줌
      • [교재 191p] 사용자가 프로그램을 실행하면 메모리에 프로그램이 상주합니다. 이때 프로그램 영역 중에 데이터 영역이 있습니다. 이 영역에는 상수나 문자열 static 변수가 생성됩니다. ⭐⭐⭐
      • [교재 192p] 생성과 소멸 - 프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸됨
    • new
    • extends
    • implements
package a.b.c.ch1;

public class Exam_Static {

	static byte b;

	static void aM(){
		System.out.println("aM()함수");
	}

	public static void main(String args[]) {
		
		// static 키워드가 붙은 변수를 호출해서 사용할 때는
		// 클래스이름.변수이름으로 호출해서 사용한다.
		System.out.println("b >>> : " + Exam_Static.b);
		System.out.println("b >>> : 이것도 되는데 사용하지 말기 >>> : " + b);

		// static 키워드가 붙은 함수를 호출할 때는
		// 클래스이름.함수이름으로 호출해서 사용한다.
		Exam_Static.aM();

		//단 static 키워드가 붙은 함수에서는
		// static 키워드를 사용할 수가 없다.
		// 예) main() 함수 블록에서는 static 키워드를 사용할 수 없다.
		//		static void main() : main() 함수 앞에 static 키워드가 있다.
	}

}

7교시 (16:30-17:20)

  • Integer로 변수를 선언하여 값을 초기화 후 콘솔에 출력 예제 및 주석 달기
// 패키지 선언
package a.b.c.ch1;

// 클래스 선언
public class Exam_Var_1 {
	
	// 메인 함수 선언
	public static void main(String args[]){
		
		/*
			1. int 형 데이터 타입을 선언한다.
			2. level : int 형 데이터 타입을 사용하려고 level 변수명을 선언한다.
			3. = : 대입 연산자
			4. 10 : 정수형 10 숫자(리터럴)을 선언한다.
			5. ; : 문장을 종결하는 ; 세미콜론(기호, 연선자)를 선언한다.
		*/
		// 6. int 형 변수 level을 선언하고 값 10을 초기화 했다.

		// level 이라는 변수에 정수 자료형 int (4byte)의 공간을 선언하고 10 할당
		int level = 10;
		// level 변수명을 호출해서(불러와서) level 변수에 초기화된 데이터를 콘솔에 출력한다.
		// 변수 출력
		System.out.println(level);

		// i 라는 변수에 자료형 int (4byte)의 공간을 선언
		int i;
		/*
			System.out.println(i);
			Exam_Var_1.java:11: error: variable i might not have been initialized
					System.out.println(i):
									   ^
			1 error
		*/

		// 변수 i에 100 할당
		i = 100;
		// 변수 출력
		System.out.println(i);
	
	}  // end of main()

} // end of Exam_Var_1

8교시 (17:30-18:30)

  • long으로 변수를 선언하여 값을 초기화 후 콘솔에 출력 예제 및 주석 달기
// 패키지 선언
package a.b.c.ch1;

// 클래스 선언
public class Exam_Limit {

	// 메인 함수 선언
	public static void main(String args[]) {

		/*
			1. int 형 데이터 타입을 선언
			2. intMax : int 형 데이터 사용하기 위해 intMax 변수명을 선언한다.
			3. = : 대입 연산자
			4. Integer.MAX_VALUE : int 형 데이터의 최대값을 가지고 있는 래퍼클래스의 MAX_VALUE 상수이다.
									여기에 int 형 최대값이 초기화 되어있다.
		*/
		int intMax = Integer.MAX_VALUE;
		/*
			1. long 형 데이터 타입을 선언
			2. longMax : long 형 데이터 사용하기 위해 longMax 변수명을 선언
			3. = : 대입 연산자
			4. Long.MAX_VALUE : long 형 데이터의 최대값을 가지고 있는 래퍼클래서의 MAX_VALUE 상수이다.
								여기에 long 형 최대값이 초기화 되어있다.
		*/
		long longMax = Long.MAX_VALUE;

		// Integer의 최대값을 콘솔에 출력
		/*
			System : java.lang.System 클래스를 선언
					 System 클래스 자바에서 시스템에 관련된 기능을 모아둔 클래스
					 System 클래스를 그냥 사용할 수 있는 이유는
					 클래스가 final 클래스이기 때문이다.
			. : 링크 연산자 : System 클래스와 out 필드를 연결하는 연산자이다.
			out : System 클래스에 있는 변수로 스트림(아웃 풀)을 출력하는 통로 역할을 하는 변수
			. : out 필드와 println() 함수를 연결하는 링크 연산자
			println() : 콘솔에 출력을 하는 함수이다.
						print : 출력하시오
						ln : 라인을 하나 띄우세요

		*/
		System.out.println("intMax >>> : " + intMax);
		// Long의 최대값을 콘솔에 출력
		System.out.println("longMax >>> : " + longMax);

		// 자료형이 int인데 할당되는 숫자가 너무 커서 할당이 되지 않음
		/*
		int num1 = 9223372036854775807;
		System.out.println("int num1 >>> : " + num1);		
		
		C:\\00.KOSMO108\\10.JExam\\ch1>javac -d . Exam_Limit.java
		Exam_Limit.java:14: error: integer number too large: 9223372036854775807
						int num1 = 9223372036854775807;
								   ^
		
		*/
		
		// 자료형이 long이나 할당되는 숫자 뒤에 L(l)이 붙지 않아 할당이 되지 않음
		/*
		long num2 = 9223372036854775807;		
		System.out.println("long num2 >>> : " + num2);
		
		C:\\00.KOSMO108\\10.JExam\\ch1>javac -d . Exam_Limit.java
		Exam_Limit.java:17: error: integer number too large: 9223372036854775807
						long num2 = 9223372036854775807;
									^
		2 errors
		*/

		// long 자료형에 할당되는 숫자 뒤에는 l이나 L이 붙어야 함
		/*
			1. long 형 데이터 타입을 선언
			2. num3 : long 형 데이터를 사용하기 위해 num3 변수명을 선언
			3. = : 대입연산자
			4. 9223372036854775807L : long 형 자료형에 맞추어 상수 초기화
		*/
		long num3 = 9223372036854775807L;
		// num3에 초기화된 값을 콘솔에 출력
		System.out.println("long num3 >>> : " + num3);
		/*
			1. long 형 데이터 타입을 선언
			2. num4 : long 형 데이터를 사용하기 위해 num4 변수명을 선언
			3. = : 대입연산자
			4. 9223372036854775807l : long 형 자료형에 맞추어 상수 초기화
		*/
		long num4 = 9223372036854775807l;
		// num4에 초기화된 값을 콘솔에 출력
		System.out.println("long num4 >>> : " + num4);

	} // end of main()

} // end of Exam_Limit

Notes

  • 변수를 공부한다는 것은 데이터 종류를 공부하는 것

728x90