과정평가형 정보처리산업기사

DAY - 3

Webdeveloper_kim 2022. 1. 3. 19:49
728x90

 

오늘 수업 시작에 앞서 같은 챕터를 여러 날짜에 이어 수업하기에 package 이름을 변경한다. package 이름을 클릭하고 F2를 누르거나 우클릭 >Refactor > Rename을 클릭하면 된다.

 

필자는 수업날짜를 입력하였다.

정수의 진법전환

10진수를 n진수로 변환하는법은 간단하다.

변환할 10진수를 n으로 몫이 0이 될 때까지 나눈다.

나누는 과정에서 나온 나머지들을 역순으로 나열하면 끝이다.

 

실수의 진법전환

실수의 진법 변환 과정에서 오차가 생기는 이유정도 알아둘 필요가 있을것같다.

실수의 진법전환은 참고정도로 해두어도 된다.

 

음수의 진법전환

이 부분이 어렵고 중요하다..

우선 컴퓨터에는 ALU(누산기), IR(명령 레지스터)라는 것들이 있는데 기본적인 산술연산을 하기 위해 필요한 것들이다.

또한 IR내에는 adder(가산기)가 있다.

즉, 컴퓨터에게는 5-2를 연산하는 것 보다 5+(-2)를 연산하는 것이 더 쉽다.

이때문에 음수를 표현할수 있어야 한다.

음수를 2진법으로 표현하기 위해 여러가지 과정을 거쳤다.

1. 2진수의 맨 앞자리(MSB(Most Significant Bit))를 1로 표현하는 것으로 음수를 표현하자

>-28을 예로 들면, 우선 28은 00011100[2]이다.

>맨앞을 1로 바꾸면 10011100[2] 가 -28이 된다.

>하지만 둘을 더해보면 기댓값은 0이어야 하지만 0이 되지 않는다.

2. 위의 오류를 해결하기 위해 보수체계를 도입했다.

어떤 수의 n의 보수 란 더했을 때 n이 되는 수를 말한다.

2의 보수법에 의해 음수를 배치하면 1번에서의 오류가 나지 않고 0의 기댓값을 그대로 결과값으로 가져오므로 음수의 2진표현은 2의보수로 정한다.

2진수의 2의보수를 구하기는 쉽다. 모든 자리의 수를 0은 1로, 1은 0으로 바꾸고 1을 더해주면 된다.

ex) -13을 2진수로 표현하려면(4비트로는 범위에 들어가지 않기때문에 8비트로 계산한다.)

>우선 절대값을 2진수로 표현한다. -> 00001101[2]

>2의보수를 구한다. -> 11110011[2]

 

여기까지 하고 다시 리터럴로 돌아갔다.

문자 리터럴과 문자열 리터럴

작은따옴표로 감싼 것을 문자리터럴, 큰따옴표로 감싼 것을 문자열리터럴이라 한다.

문자열 리터럴이 들어가는 문자열클래스인 String은 첫자가 대문자로 시작해야한다.

또한 원래 앞에 new라는 연산자를 사용해야하지만 특별히 생략가능하다.

문자열 리터럴은 큰따옴표 안에 아무런 문자도 넣지 않는 것을 허용하며

문자 리터럴은 반드시 안에 하나의 문자가 있어야 한다.

어느타입의 리터럴이든 문자열리터럴과 연산하면 String으로 변환한 후 결합한다.

>이 때 연산의 순서가 적용되니 헷갈리지 않아야한다.

 

형식화된 출력 - printf

여지껏 예제에서 사용해온 println은 print(출력)하고 ln(줄바꿈)한다를 뜻한다.

printf는 format(형식)을 가지고 print(출력)하는 것을 의미한다.

기본 형식은 printf("format", ); 이렇게 사용한다.

Printf관련 예제

우선 위와같이 여러 변수들을 선언 및 초기화하였다.

변수 big과 hex의 경우 int타입이 허용하는 용량을 넘어서기에 long타입으로 사용한다.

변수에 대한 설명은 여기까지 하고 그 밑에 출력하는 코딩을 보자

%가 많이 나오는데 이는 printf에서 쓰는 지시자들이다.

지시자의 전체 목록을 보려면 아래의 주소에서 Formatter클래스를 찾으면 전부 기록되어있다.

자주쓰는 것은 외워지겠지만 모두 외울 필요는 없다. 필요할 때마다 찾아서 코딩하게 될 것이다.

인터넷검색, 블로그가 아닌 Java API에서 검색하여 코딩하는 순간 초보웹개발자 티를 벗게 된다한다.

https://docs.oracle.com/javase/8/docs/api/

 

Java Platform SE 8

 

docs.oracle.com

 

위의 예제에는 많이 사용되는 지시자들에 대한 설명이 덧붙여져 있다.

복습하면서 추가로 연습해본 것 중

System.out.printf("[%030s]%n", str);

>위와같은 오류가 발생했다. %s 자체가 문자열형식으로 출력하라는 지시자이기에 문자열자체가 틀어질 수 있는 빈자리를 0으로 표기하는 코딩은 오류가 발생하는 것 같다.

System.out.printf("finger=[%.1d]%n", finger);

>이 또한 오류가 발생했다. 이부분은 System.out.printf("finger=[%.1s]%n", finger); 로 수정할 경우 오류가 수정되었다.

>이 경우 역시 값 자체가 달라지기 때문에 오류가 나는 것 같다. 예제의 바로 밑에 주석처리해 놓은 System.out.printf("finger=[%-05d]%n", finger); 와 같은 오류인것 같다.

 

화면에서 입력받기 - Scanner

 

scanner를 사용하기 위해서는 import java.util.* 라는 문장을 맨 앞에 추가해두어야 한다.

그 다음엔 Scanner클래스의 객체(참조형 변수)를 생성한다. (파란네모) > 이부분은 외워둬야한다.

위의 예제를 실행(Ctrl+F11)하면 노란 선까지의 프로그램의 입력대기상태까지 출력이된다.

또한 빨간 동그라미로 표시한 부분처럼 빨간색 네모가 활성화된다.

이는 프로그램이 실행중임을 의미하고 클릭하여 누르거나 input값을 입력하면 프로그램이 끝나게 된다.

출력된 값이 나오는 console 창에서 input값을 입력한다.

 

input에 22를 입력해보니 밑에 코딩에서 넣어놓은 나머지 내용이 출력되었다.

이와 동시에 빨간네모가 비활성화되며 프로그램이 끝났음을 알려준다.

 

오류

input에 정수가 아닌 문자를 넣거나 공백으로 채우면 위와같은 오류가 발생한다.

빨간 네모로 구분해 놓은 부분이 오류가 생긴 코딩부분이다. 클릭하면 해당 위치로 이동한다.

위의 예제에 주석으로 메모해 두었는데 이 오류의 이유는 다음과같다.

parseInt는 input에 입력된 내용을 검수번역하여 int타입으로 바꾸기 때문에 int형이 아닌 실수형이나 문자형, 공백같은 input에는 오류가 발생하는 것이다.

 

오늘 교재의 수업은 여기까지 나갔다.

하지만 오늘 한 것이 하나 더있었으니..!

바로 자신만의 도메인을 구축하고 aws에 자신의 서버를 만드는 것이였다.

첫수업에 가입해놓은 aws와 cloudflare등 여러 사이트를 이용하였다.

오늘 만든 도메인에 내일은 aws에 구축한 나의 서버의 ip를 연결하여 서브 컴퓨터를 도메인을 통해 접속해볼것이다.

이제야 수업 들은지 3일되었다.

근데 평소엔 생각지도 못했던 일들이 내손에서 이루어지고있다. 며칠만에 이렇게까지 신기함을 느끼다니..

IT가 생각보다 가까이에 있던건지 내가 무지했던건지 구분이 가질 않는다.

내일 또 어떤 새로움이 기다리고있을지 기대된다.

 

 

 

 

728x90

'과정평가형 정보처리산업기사' 카테고리의 다른 글

DAY - 6  (0) 2022.01.06
DAY - 5  (0) 2022.01.06
DAY - 4  (0) 2022.01.04
DAY - 2  (0) 2022.01.02
DAY - 1  (0) 2021.12.30