국비 2일차

냐아암·2023년 4월 17일
0

국비

목록 보기
3/114

1. 컴파일러, 주석, +기호

  • //(한 줄) 주석: 컴파일러가 해석하지 않는 부분, 주로 코드 설명 작성

  • /별 범위 주석 별/

  • 컴파일러(Compiler): 코드를 2진수(0,1)로 변환하는 번역기

  • Java코드 실행 순서: 코드 작성-> ctrl F11 실행 (컴파일러가 2진수로 변역 -> JVM 실행)

package edu.kh.basic; //basic.kh.edu

public class JavaTest {
	//class: 자바 코드가 작성되는 영역
        public static void main(String[] args){
        	//main method(메소드): 자바 애플리케이션(프로그램)을 실행하기 위해 필요
        	//shift enter: 커서 중간에 있을 때 엔터 치기
        	System.out.println("Hello world!!");
        	System.out.println("1234");
        	System.out.println("첫날 어떠셨나요?");
        	//숫자 연산
        	System.out.println("-----------------------");
        	System.out.println("1+2"); //1+2
        	System.out.println(1+2);  //3
        	//""안에 작성된 코드는 단순 문자열로 인식
        	//""안에 작성되지 않은 코드는 숫자, 변수로 인식
        	System.out.println(50-23); 
        	System.out.println(12*13);
        	System.out.println(327/3);
        	
        	//"(문자열)" + 숫자 함께 작성
        	System.out.println("14*19="+14*19); //14*19=266
        	System.out.println("90+70+65="+ 90+70+65); //90+70+65=907065
        	//+기호의 역할
        	//->숫자 + 숫자 --> 덧셈 연산 결과
        	//->문자열 + 숫자/문자열 --> 이어쓰기
        	//자바는 사칙연산의 우선순위를 그대로 따른다.
        	System.out.println("90+70+65="+ (90+70+65)); //90+70+65=225
        }
}
  • '+'기호의 역할
    ->숫자 + 숫자 --> 덧셈 연산 결과
    ->문자열 + 숫자/문자열 --> 이어쓰기
    =>자바는 사칙연산의 우선순위를 그대로 따른다.

2. 변수

  • 변수(Variable)
    - 메모리(RAM)에 값을 기록하는 공간
    ->공간에 기록되는 값(Data)이 변할 수 있어서 변수라고 함
    - 변수는 여러 종류 존재(저장되는 값의 형태, 크기가 다름)
  • 변수 사용의 장점
    1. 가독성 증가
    2. 재사용성 증가(한 번 만든 변수를 계속 사용)
    3. 코드 길이의 감소
    4. 유지보수성 증가(코드 수정 간단해짐)
package edu.kh.variable.ex1;

public class VariableExample1 {
	//생성된 .java 파일과 class 오른쪽에 작성된 이름은 동일해야 함
	public static void main(String[] args) {
		
		System.out.println(2*3.141592653589793*10);
		System.out.println(3.141592653589793*10*10);
		System.out.println(3.141592653589793*10*10*20);
		System.out.println(4*3.141592653589793*10*10);
		
		//변수 사용
		double pi = 3.141592653589793; //원주율 , =:대입
		int r = 10; //반지름(radius)
		int h = 20; //높이 (height)
		
		System.out.println("----------------------");
		System.out.println(2*pi*r);  //원의 둘레
		System.out.println(pi*r*r); //원의 넓이
		System.out.println(pi*r*r*h); //원기둥의 부피
		System.out.println(4*pi*r*r); //구의 겉넓이
	}

}

3. 기본 자료형, 변수/상수 규칙

  • 1byte= 8bit

  • 자바 기본 자료형 8가지
    1.논리형: boolean(1byte)
    2.정수형: byte(1byte), short(2byte), int(4byte), long(8byte)
    3.실수형: float(4byte), double(8byte)
    4.문자형: char(2byte 유니코드)

  • 변수 선언: 메모리에 값을 저장할 공간을 할당하는 것

  • 리터럴: 변수에 대입되거나 작성되어지는 값 자체(자료형에 따라 리터럴 표기법이 다름)

  • 변수 명명 규칙
    1.대소문자 구분, 길이 제한X
    2.예약어 사용 X
    3.숫자로 시작 X
    4.특수문자 $,_만 사용 가능, but 쓰지 않는 편
    5.카멜 표기법: 띄어쓰지 않고 후속 단어 첫 글자 대문자로 작성, 단 첫 시작 글자는 소문자로 하는 것이 관례
    6.변수명은 언어를 가리지 않음, but 쓰지 않는 편

  • 상수(항상 같은 수)
    -변수의 한 종류
    -한 번 값이 대입되면 다른 값을 대입할 수 없다.
    -자료형 앞에 final 키워드를 작성(마지막에 대입되는 값)

  • 상수 명명 규칙: 모두 대문자, 여러 단어 작성 시_언더바 사용

  • 상수 사용하는 경우
    1. 변하면 안 되는 고정된 값을 저장할 때
    2. 특정한 값에 의미를 부여하는 경우

package edu.kh.variable.ex1;

public class VariableExample2 {
	public static void main(String[] args) {
		
		boolean booleanData;
		//메모리에 논리 값(T/f)을 저장할 공간을 1byte 할당하고 
		//할당된 공간을 booleanData로 부르겠다.
		booleanData = true; //booleanData 변수에 true 대입
		System.out.println("booleanData: "+booleanData);
		
		byte byteNumber=127; //short, byte는 옛날 코드의 잔재
		//메모리에 정수 값을 저장할 공간을 1byte 할당하고 그 공간을 byteNumber로 부르겠다.
		//선언된 byteNumber 변수에 처음으로 127을 대입했다. 
		//--> 초기화: 처음 변수에 값을 대입
		short shortNumber=32767; //변수 선언 및 초기화
	//  자료형 변수명      =리터럴
		
		//int는 정수 자료형의 기본형
		int intNumber=2147483647; //변수의 선언 및 초기화
		long longNumber=10000000000L; //l/L 대소문자 상관X
		//The literal 10000000000 of type int is out of range 
		
		float floatNumber=1.23456F;
		//cannot convert from double to float
		
		//double은 실수 자료형의 기본형
		//리터럴 표기법이 없는 실수는 double로 인식
		double doubleNumber=3.141592;
		
		//문자형(문자 하나) 리터럴 표기법 ''홑따옴표 사용
		char ch='A';
		char ch2= 66;
		//char 자료형에 숫자가 대입될 수 있는 이유:
		//  컴퓨터에는 문자표가 존재하고 있는데 숫자에 따라 지정된 문자 모양이 맵핑되어 있고
		//  'B' 문자 그대로가 대입이 돠면 변수에 숫자 66으로 변환되어 저장
		//  --> 변수에 애초에 66이라는 숫자를 저장하는 것이 가능
		
		System.out.println("ch: " +ch);  //A
		System.out.println("ch2: " +ch2); //B
		
		//변수 명명 규칙
		//1. 대소문자 구분, 길이 제한 X
		int abcdefghijklmnopqrstuvwxyz;
		int abcdefghijklmnopqrstuvwxyZ; //z대문자
		
		//2. 예약어 사용X
		//double double; --> 오류
		
		//3. 숫자 시작 X
		//char 1abc;
		
		//4. 특수문자 $, _ 만 사용 가능 (But, 쓰지 않는 편)
		int $intNum;
		int int_num; //자바는 카멜 표기법 사용 (_작성 표기법은 DB에서 사용)
		
		//5. 카멜 표기법: 변수명 작성 시 여러 단어 이어서 작성하는 경우
		char helloWorldAppleBananaTomato;
		
		//6. 변수명은 언어를 가리지 않음 (But, 쓰지 않는 편)
		int 정수1;
		double 실수2=3.14;
		System.out.println(실수2); //3.14
		
		//----------------------------------------------------
		
		int number=10;
		System.out.println("number: " + number); //10
		
		number=20;
		System.out.println("number: " + number); //20
		
		//상수
		final double PI_VALUE = 3.14;
		//PI_VALUE = 2.322; --> 오류 (상수이기 때문에 대입 불가)
		
		final int LEFT_MOVE = -1;
		final int RIGHT_MOVE = 1;

	} 
}

4. 형변환

  • 형변환(Casting): 값의 자료형을 변환하는 것 (단 boolean 제외)

  • 형변환 필요 이유
    컴퓨터는 기본적으로 같은 자료형끼리만 계산 가능
    -> 다른 자료형과 연산 시 오류 발생
    --> 이런 상황 해결하기 위해 필요한 기술이 형변환이다.

  • 형변환 종류: 자동 / 강제

  • 자동 형변환
    [값의 범위]가 큰 자료형과 [값의 범위]가 작은 자료형의 연산 시 컴파일러에 의해 작은 자료형을 큰 자료형으로 자동 형변환함

  • 강제 형변환 :기존 자료형을 원하는 자료형으로 강제 변환시키는 것
    1. 값의 범위가 큰 자료형을 작은 자료형으로 변환할 때 사용
    2. 출력되는 데이터의 표기법을 변화시키고 싶을 때

  • 강제 형변환 방법
    -자료형을 변환시키고 싶은 값 또는 변수 앞에 (자료형)을 작성

package edu.kh.variable.ex1;

public class VariableExample3 {
	public static void main(String[] args) {
		
		//자동 형변환
		int num1 = 10;
		double num2=3.5;
		System.out.println("자동 형변환 결과: "+(num1+num2));
		// 원래 오류가 발생해야 하지만 자동 형변환으로 발생하지 않는다.
		
		int i1=3;
		double d1= i1; //double은 실수만 저장할 수 있는 자료형
		               //정수가 대입되는 연산이 수행되면 
		System.out.println("i1: "+ i1); //3
		System.out.println("d1: "+ d1); //3.0
		System.out.println("num2+d1: "+(num2+ d1)); // 6.5
		
		//int -> long 형변환
		int i2 = 2_100_000_000; //21억
		long L2= 10_000_000_000L; //100억
		long result2= i2+L2;
		//int + long --> long + long = long
		System.out.println("result2: "+result2);
		
		//char -> int 형변환
		char ch3 = 'V';
		int i3 = ch3; //대입도 연산이다
		              //int  변수 = char 값
		              //                   -->int 자동 형변환
		System.out.println(i3); //86
		char ch4 = '각';
		int i4= ch4;
		System.out.println(i4); //44033
		
		//long -> float 자동 형변환
		long l5 = 123456789123456789L;
		float f5 = l5 * 100; //long 범위 초과
		//float = long * int
		//float = long * long
		//float = long 결과
		//float = float(자동 형변환)
		System.out.println(f5); //-6.1010652E18 (오버플로우)
		//오버플로우는 컴퓨터가 미리 예측할 수 없으므로 개발자가 예측해야 함
		int i6 = 2147483647; // int 최댓값
		int result6= i6 +1;
		System.out.println(result6); //-2147483648
				
	}

}
package edu.kh.variable.ex1;

public class VariableExample4 {

	public static void main(String[] args) {
		
       //강제 형변환
		double temp =3.14;
		int num = (int)temp;
		//Type mismatch: cannot convert from double to int
		System.out.println("temp: "+temp); //3.14
		System.out.println("num: "+num); //3
		//실수 -> 정수형 변환 시 소수점 버림 처리(데이터 손실 발생)
		
		//int --> byte 강제 형변환
		int iNum = 290;
		byte bNum= (byte)iNum;
		System.out.println("iNum: "+iNum); //290 (형변환 전)
		System.out.println("bNum: "+bNum); //34 (형변환 후)
		//같은 정수형끼리의 변환 시에도 값의 범위 차이에 의해 데이터 손실 발생
		
		//char -> int 강제 형변환
		char ch ='A'; //65
		int iNum2= ch; //자동 형변환
		System.out.println("iNum2: "+iNum2);
		System.out.println((int)ch); //65 ->자동 형변환과 결과 동일
		
		//int -> char 강제 형변환
		int iNum3=44033;
		char ch3= (char)iNum3;
		System.out.println(iNum3 + "번째 문자: "+ch3); //각
		
		//소문자 'a'보다 10칸 뒤에 있는 문자는 무엇?
		char ch4='a';
		int iNum4=ch4+10;
		System.out.println("정답: " +(char)iNum4); //k
		System.out.println((char)((int)ch4+10)); //k
		System.out.println((char)(ch4+10)); //k
		
		
		

	}

}

5. 예제

  • float, double 차이점
    -float: 소수점 아래 8번쨰 자리까지 연산 후 반올림
    -double: 소수점 아래 16번째 자리까지 연산 후 반올림
package edu.kh.variable.practice;

public class CastingPractice1 {

	public static void main(String[] args) {
		int iNum1 = 10;
		int iNum2 = 4;
		
		float fNum = 3.0f;
		
		double dNum = 2.5;
		
		char ch = 'A';
		
		System.out.println( iNum1 /iNum2 ); // 2
		System.out.println( (int)dNum ); // 2
		
		System.out.println( iNum2 * dNum ); // 10.0
		System.out.println( (double)iNum1 ); // 10.0
		
		System.out.println( ((double)iNum1/(double)iNum2) ); // 2.5
		System.out.println( dNum ); // 2.5
		
		System.out.println( (int)fNum ); // 3
		System.out.println( (int)(iNum1/fNum) ); // 3
		
		System.out.println( (iNum1/fNum) );// 3.3333333
		System.out.println( (iNum1/(double)fNum) ); // 3.3333333333333335
		
		System.out.println( ch ); // 'A'
		System.out.println( (int)ch ); // 65
		
		System.out.println( ch+iNum1 ); // 75
		System.out.println( (char)(ch+iNum1) ); // 'K'

	}

}
profile
개발 일지

0개의 댓글