신청한 내일배움캠프에 뽑혀서 오늘 spring 첫 사전캠프를 가졌다.
첫날 팀원들과 마주앉아 처음 공부했다. 같이 공부한다는 느낌은 아직 어색해서 없었다...
따로 자율학습을 하는데, 커리큘럼이 신경쓴게 느껴졌다. 저기가 1팀 공부방인데 바로 밖 복도로 나가면 담임매니저님이 항시 대기하고 있어
모르는 것이나 질문이 있으면 바로 달려나가서 물어보면 대답해주신다.
JAVA언어는 처음 배워보는 언어지만 그 전에 배워보았던 언어들이 있어서 기초지식은 갖고있어 배우기 편했다. 예전 게임프로그래밍을 할때 배웠던 C, C++, C#지식이 도움이되는 순간이었다.
첫날이라 기초만 배웠지만 첫날 진도량부터가 배워본적 없는 사람은 할 수 있을까 싶은 양이었다.
Day1이라고 무조건 첫날에 다 못 한다고 뭐라고 하진 않지만 나도 먼저 배워본 내용이 아니었다면 진도가 밀렸을 것이다...😵💫
첫날 강의 내용은 정말 자바라는 언어나 컴퓨터 언어 자체의 기초를 설명하는 내용이었다. 여러 연산자들이나 코드를 읽는 능력들이 필요했다.
아래는 첫날의 기초 과제이다.
1번과제
class Hello {
public static void main(String[] args) {
//2-4. 다음 중 변수를 잘못 초기화 한 것은?
byte b = 127; // byte b = 256은 byte의 용량을 초과하기에 127로 변경
char c = ' '; //char c = ''은 char타입에는 아무값도 들어가지 않는것은 불가능 공백으로 대체
char answer = 'n'; //char answer = 'no'는 char는 문자열을 넣을 수 없다. n으로 대체
float f = 3.14f; // 문제에선 float f = 3;14로 그냥 리터럴 표현도 안 해주고 세미콜론(;)도 없어 교체
double d = 1.4e3d; // double d = 1.4e3f로 나와 있던 문제에서 double타입이기에 리터럴 교체
//2-7. 다음 문장들의 출력 결과를 적으세요. 오류가 있는 문장의 경우, '오류' 라고 적으세요.
System.out.println("1" + "2"); //문자열 + 문자열 이므로 12출력
System.out.println(false+""); //거짓을 뜻하는false와 공백의 합은 문자열의 형태로 두개가 이어진형태로 나온다.
System.out.println('A' + 'B'); //''기호를 사용했으므로 문자와 문자의 합니다. 아스키코드 표를 보면 정수65와 66의 합인것을 알 수 있다.131
System.out.println('1' + 2); //1은 아스키코드로 49 + 정수2 이므로 51이 된다.
System.out.println('1' + '2'); //위와같이 49+ 2는 50이므로 99가 된다.
System.out.println('J' +"ava"); //대문자J문자 + 문자열이므로 문자열으로 출력된다. Java
//System.out.println(true + null); // 이 코드는 오류이다. null값을 더할 수 없다.
//2-8. 아래는 변수 x, y, z의 값을 서로 바꾸는 예제이다. 결과와 같이 출력되도록 코드를 넣으세요.
int x = 1;
int y = 2;
int z = 3;
//값을 바꾸기 위해선 값을 담고있을 변수가 하나 더 필요하다.
int temp;
temp = x;
x=y;
y=z;
z= temp;
//이렇게 하면 값들을 바꿀 수 있다.
System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("z="+z);
//예상 결과 : x=2, y=3, z=1
}
}
두번째 과제
class Hello {
public static void main(String[] args) {
byte b = 10;
char ch = 'A';
int i = 100;
long l = 1000L;
//3-1. 다음 중 형변환을 생략할 수 있는 것은? (모두 고르시오)
b = (byte)i; //byte범위 안이지만 i는 변수이므로 확실하지 않아서 생략할 수 없다.
ch = (char)b; //문자값으로 형변환 해줘야한다.아스키코드로 변환
short s = (short)ch; //형변화 해줘야한다 아스키 코드로 변환 65
float f = (float)l; //생략해줄 수 있다.
i = (int)ch; // 생략해줄 수 있다.
//3-2. 다음 연산의 결과와 그 이유를 적으세요.
int x = 2;
int y = 5;
char c = 'A'; // 'A'의 문자코드는 65
System.out.println(y >= 5 || x < 0 && x > 2);
//↑↑↑우선순위가 &&연산자가 더 빠르므로 &&부터 연산 답은 참.
System.out.println(y += 10 - x++);
//↑↑↑우선순위가 ++가 더 빠르지만 참조된 뒤 증가하므로 x=2 그 뒤 (10-2)+ y와 같다. 답은 13
System.out.println(x += 2);
//위에서 x++에의해 x가 3으로 증가함 x = x+2와 같으므로 5 그리고 x= 5가 된다.
System.out.println(!('A' <= c && c <= 'Z'));
//!가 우선순위는 빠르지만 () 내부를 먼저 연산한다 내부는 거짓 답은 거짓의 부정인 참이다.
System.out.println('C' - c);
//C는 아스키코드로 67 문자변수 c = 'A'이므로 A는 65, 67-65 = 2
System.out.println('5' - '0');
//5-0 = 5
System.out.println(c + 1);
//'A'는 65, 65+1 = 66
System.out.println(++c);
//++가 앞에오면 값이 참조되기 전에 증가한다 65의 1증가값 66의 문자 B
System.out.println(c++);
//참조된 후에 증가하므로 위에서 증가한 66값의 문자 B
System.out.println(c);
//위에서 증가된 67의 문자 C
//3-3. 아래는 변수의 num 값 중에서 백의 자리 이하를 버리는 코드이다.
//만일 변수 num의 값이 '456'이라면 '400'이 되고, '111'이라면 '100'이 된다.
//알맞은 코드를 넣으시오.
int num = 456;
System.out.println((num/100)*100);// 100으로 나눠서 나머지는 버려주고 다시 곱해준다.
//3-4. 아래의 코드는 사과를 담는데 필요한 바구니(버켓)의 수를 구하는 코드이다.
//만일 사과의 수가 123개이고 하나의 바구니에는 10개의 사과를 담을 수 있다면, 13개의 바구니가 필요할 것이다.
//알맞은 코드를 넣으시오.
int numOfApples = 123; // 사과의 개수
int sizeOfBucket = 10; // 바구니의 크기(바구니에 담을 수 있는 사과의 개수)
int numOfBucket = (numOfApples%sizeOfBucket) == 0? (numOfApples/sizeOfBucket):((numOfApples/sizeOfBucket+1)); // 모든 사과를 담는데 필요한 바구니의 수
System.out.println("필요한 바구니의 수 :"+numOfBucket);
//3-5. 아래는 변수 num2의 값에 따라 '양수', '음수', '0'을 출력하는 코드이다.
//삼항연산자를 이용해서 빈칸에 알맞은 코드를 넣으시오.
//Hint : 삼항 연산자를 두 번 사용할 것!
int num2 = 10;
System.out.println(num2 == 0? 0:num2 > 0? "양수":"음수");
//3-6. 아래는 화씨(Fahrenheit)를 섭씨(Celcius)로 변환하는 코드이다.
//변환 공식이 'C = 5/9*(F-32)'라고 할 때, 빈 칸에 알맞은 코드를 넣으시오.
// 단, 변환값은 소수점 셋째자리에서 반올림하며, Math.round() 함수를 사용하지 않고 처리할 것!
int fahrenheit = 100;
float celcius = (float)(Math.ceil((5/9.0*(double)(fahrenheit-32))*100.0)/100.0);
// 5/9.0이라고 나눗셈 공식에 정수/정수가 아닌 double형을 선언해주는게 중요하다 그렇지 않다면 답이 0.0이 도출된다.
System.out.println("Fahrenheit:"+fahrenheit);
System.out.println("Celcius:"+celcius);
//예상 결과 : Fahrenheit:100, Celcius:37.78
}
}
이렇게 첫날 캠프수업을 진행해봤다. 역시 진도가 빠르다... 알고 있는 내용이었기에 망정이지 6시간만에 절대 할 수 없는 양인것같다.
문제들은 생각할 수 있게 만들어주고 코드를 여러번 입력해서 실행해보고 테스트해보게하고 문제점을 찾을 수 있도록 만들어진것 같아서 매우 유익했다.
마지막 문제는 조금 어려웠는데, 괄호안에 코드를 짜는것이 복잡하다기 보다 계속 0.0이라는 값이 나와서 조금 헤맸다.
알고보니 5/9를 하는 과정에서 java는 정수/정수 연산은 정수만 나오도록 하다보니 소수점자리를 모두 버리고 0.0이 나와버리는 것이다.
0에 0을 곱하니 0.0이 float형으로 나올 수 밖에...
5.0/9.0혹은5.0/9혹은5/9.0등 하나는 실수형으로 어떤 타입인지 알아볼 수 있게 표기해야한다.
해결하고나니 정상적으로 계산이 되었다.
남은 해적단 웹트랙 마지막주차 수업도 얼른 들어야겠다.
이상 첫째날 개발일지를 마치겠다...