국비 2일차_1

강지수·2023년 12월 13일
0

국비교육

목록 보기
3/97

학생들이 제출한 순서도 하나씩 보여주면서 확인, 별다른 피드백은 없었음.

+ 지난 수업 복습 약간


DBMS : Database Management System, 데이터베이스 관리 시스템

데이터베이스 종류 中 관계형 DBMS (RDBMS)

  • Oracle
  • My-SQL
  • DB2
    SQL Server
    Sybase
  • maria DB
  • msSQL

우리는 Oracle 을 중점적으로 배울 예정이며 mariaDB 도 약간 경험해 볼 예정


public static void main(String[] args)

이것을 메인 메소드라고 함.

메인 메소드는 프로젝트에 1개만 있을 수 있음.


타입 복습


Workspace 폴더 바로 열기

project 우클릭 - Show In - System Explorer


eclipse 작업 파일 백업

project 단위로 백업함

project 우클릭 - Export (내보내기)

General - Archive File - Next

Browse - 경로, 이름 설정 후 저장 - Finish


새 class 생성, 이름 : ByteExample

package com.tech.goott1;

public class ByteExample {

	public static void main(String[] args) {
		byte var1=-128; // 문장의 끝에는 ; 을 붙인다.
		byte var2=-30;
		byte var3=0;
		byte var4=30;
		byte var5=127;
		System.out.println(var1);
		System.out.println(var2);
		System.out.println(var3);
		System.out.println(var4);
		System.out.println(var5);
	}

}

결과

var1, var2, var3 ... : 변수
= : 대입연산자, 우측 항을 좌측 항에 대입한다는 의미

byte 는 127까지 표현할 수 있기 때문에 128이상을 넣으면 오류가 난다.

byte var6=(byte) -129;
byte var7=(byte) 128;

System.out.println(var6);
System.out.println(var7);

위와 같은 식으로 표현가능한 범위 밖의 수도 넣을 수 있는데 이렇게 하면 결과값이

127
-128

로 나온다.

그 이유는 위와 같이 표현범위안에서 사이클을 도는 것과 같다고 생각하면 된다.
(overflow 하게 되면 다음 cycle로 돌아감, 숫자의 경우)


진수 변환

10진수 -> 2진수 변환

수를 2로 안나누어질 때까지 나눠서 그 몫과 나머지를 기입, 최종 몫과 나머지들을 차례로 나열하면 된다.

2진수 -> 10진수 변환

각 자리의 수를 1,2,4,8,16... (2의 0승, 1승, 2승 .... ) 와 곱해서 더한 값


2진수 : 각 숫자당 1bit 씩 차지한다.
8진수 : 각 숫자당 3bit 씩 차지한다.
16진수 : 각 숫자당 4bit 씩 차지한다.


2진수 -> 8진수 변환

2진수를 3자리씩 끊어서 (8진수는 3bit, 2진수는 1bit씩 차지하기 때문) 각 3자리를 0~7까지의 수로 변환하면 8진수가 됨

따라서 2진수 -> 16진수 변환은 2진수를 4자리씩 끊어서 각 자리를 0~9, a~f 로 변환하면 됨
(10 = a, 11 = b ... 15 = f)

16진수 -> 2진수, 8진수 -> 2진수 변환

각 수를 2진수화해서 나열하면 됨.

미션
10진수 237 을 2진수, 8진수, 16진수로 나타내보세요

2진수 : 11101101 (2)
8진수 : 355 (8)
16진수 : ed (16)

미션2
101101011110 (2) 을 10진수, 8진수, 16진수로 나타내보세요

10진수 : 5790
8진수 : 5536 (8)
16진수 : b5e (16)


프로그래밍에서의 변수

데이터를 담는 상자의 의미
데이터를 가리키는 지시대명사의 의미 (포인터)
메모리상 공간의 의미


변수의 타입에 대해 느슨한 언어 (ex) 파이썬)
var a = 10;
var a = "aaaa";
a = "123";

변수의 타입에 느슨하면 개발 시점에는 유리하지만 실행 시에는 불리한 방식

변수의 타입에 대해 엄격한 언어 (자바, C)
정확한 변수의 타입을 명시해서 메모리의 공간을 효과적으로 사용
다른 타입의 데이터로 변환할 때에는 별도의 처리


예시

public class VarTest1 {
 
	public static void main(String[] args) {
		
		int v1 = 10; // v1 : 변수, 정수형 변수 v1에 10의 값을 대입한다.
		
		System.out.println(v1);
	}
}

결과

10

com.tech.goott2 라는 새 package 생성
IntExp 라는 새 class 생성

package com.tech.goott2;

public class IntExp {

	public static void main(String[] args) {
		int var1=10;
		int var2=017;
		int var3=0b101;
		int var4=0xa;
		int var5=0xb;
		int var6=0xc;
		int var7=0xd;
		int var8=0xe;
		int var9=0xf;
		
		System.out.println("var1:"+var1);
		System.out.println("var2:"+var2);
		System.out.println("var3:"+var3);
		System.out.println("var4:"+var4);
		System.out.println("var5:"+var5);
		System.out.println("var6:"+var6);
		System.out.println("var7:"+var7);
		System.out.println("var8:"+var8);
		System.out.println("var9:"+var9);

	}

}

결과

var1:10
var2:15
var3:5
var4:10
var5:11
var6:12
var7:13
var8:14
var9:15

숫자 앞에 붙는 수에 따라
0b : 2진수
0 : 8진수
0x : 16진수
로 인식함.


FloatDoubleExp class 생성

package com.tech.goott2;

public class FloatDoubleExp {

	public static void main(String[] args) {
		double var1=3.14;
		float var2=3.14F;
		
		System.out.println("var1:"+var1);
		System.out.println("var2:"+var2);

	}

}

결과

var1:3.14
var2:3.14

double 과 float 둘 다 실수 타입이기 때문에 구분하기 힘드므로
float 뒤에는 f 를 써준다. (생략 불가)
double 뒤에 d 를 써도 오류가 나지 않지만
굳이 둘 중 하나만 구별하면 되기 때문에 잘 쓰지 않는다. (생략 가능함)

		double var4=0.1234567890123456789;
		float var5=0.1234567890123456789f;

		System.out.println("var4:"+var4);
		System.out.println("var5:"+var5);

결과

var4:0.12345678901234568
var5:0.12345679

double과 float는 각각 표현할 수 있는 유효범위가 다르다.
유효범위까지 표현되고 뒤에서 반올림한다
double이 float보다 더 정밀하게 표현가능하다.

승수 표현

//		승수
		int var6=3000000;
		double var7=3e6;
		float var8=3e6f;
		double var9=2e-3;
		
		System.out.println("var6:"+var6);
		System.out.println("var7:"+var7);
		System.out.println("var8:"+var8);
		System.out.println("var9:"+var9);

결과

var6:3000000
var7:3000000.0
var8:3000000.0
var9:0.002

승수는 (exponent) e로 표현할 수 있다. e 다음의 수가 지수가 된다.
지수표현은 int 형에서는 바로 쓸 수 없고

int var=(int) 3e6;

와 같이 형변환을 통해야만 쓸 수 있다. 그 이유는 부동소수점때문.

부동소수점 (Floating Point)

고정 소수점 : 통상적으로 쓰이는 소수점 표현
부동 소수점 : 부호, 지수, 가수 부를 각 비트에 맞게 표현하는 방법

부동 소수점 방식이 고정 소수점 방식보다 훨씬 다양한 수를 메모리효율적으로 표현할 수 있다.
= 같은 bit 안에서 더 정밀한 숫자를 표현할 수 있다.

ex)
고정 소수점 방식

263.3 (10)
=> 100000111.01001100110011..... (2) (0011의 무한반복)

부동 소수점 방식

263.3 (10)
=> 100000111.01001100110011..... (2) (0011의 무한반복)
=> 1.0000011101001100110011..... * 2^8 (2의 8승)
=> 부호 비트 (1bit) : 0 (양수)
지수 비트 (8bit) : 10000111 (2^8 의 8이 지수, 127+지수를 기록 / 127+8 = 135)
가수 비트 (23bit) : 00000111010011001100110


유니코드

UnicodeExp class 생성

package com.tech.goott2;

public class UnicodeExp {

	public static void main(String[] args) {
		char char1='가';
		char uni1='\uac00';
		
		System.out.println("char1:"+char1);
		System.out.println("uni1:"+uni1);

	}

}

결과

char1:가
uni1:가

char 타입은 ' ' 로 감싼다. (작은따옴표)
char 타입은 1글자를 담는다. 2글자 이상 못씀
unicode 를 사용할 땐 \u를 앞에 붙인 후 unicode 표에 맞는 코드를 쓰면 됨

미션
여러분의 이름을 유니코드로 표현해보세요.

		char name1='\uac15';
		char name2='\uc9c0';
		char name3='\uc218';
		
		System.out.println(name1);
		System.out.println(name2);
		System.out.println(name3);

결과

강
지
수

강사님의 코드

		char u1='\uD64D';
		char u2='\uAE38';
		char u3='\uB3D9';

		System.out.println("hi "+u1+u2+u3);

결과

hi 홍길동

출력할 때

System.out.println(name1+name2+name3);

로 했더니 '145389' 라는 결과가 나왔음.
이는 자바에서 수를 먼저 처리한다는 연산 규칙 때문임

System.out.println(""+name1+name2+name3);

과 같이 ""를 이용해 문자를 먼저 처리하게하면 뒤의 변수들도 문자로 인식해서 처리함.
=> 문자+숫자 => 문자열화 됨


day002 project 생성
com.tech.gt01 package 생성
BinaryExp class 생성

10진수를 2진수로 변환하는 메소드 사용

package com.tech.gt01;

public class BinaryExp {

	public static void main(String[] args) {
		// 10진수를 2진수로 변환하는 메소드 사용
		String str=Integer.toBinaryString(25);
		System.out.println("25의 2진수값은:"+str);

	}

}

결과

25의 2진수값은:11001

Java Api 를 찾아보면 각 메소드별 사용 방법 등을 알 수 있음.

profile
개발자 준비의 준비준비중..

0개의 댓글