비전공자의 코딩 일지/학원 수업 정리

코딩 학원 4일차 (Java 논리연산자)

Hoder2 2022. 6. 12. 18:19

fattyLevel.7z
0.01MB

수업 중에 자격증에 대한 얘기가 나왔다. 국내와 해외 자격증 중 대표적인 것이 정보처리기사와 OCJP인데

 

OCJP - 덤프(기출문제집)만 달달 외워서 가면 되기에 돈만 있으면 딸 수 있어서 있어 봤자 안 쳐준다.

근데 없으면 왜 없냐 하는 그런 자격증..

하지만 OCP(오라클 DB 관리자)는 Oracle사 공인교육을 들어야만 응시가 가능해서 나름 쳐준다고 한다.

 

정보처리기사 - 이거는 IT업계의 신분증이라고 하셨다.

 

전 날 수업에서 <<를 보여주시고 끝났었다.

left shift 연산자라고 불리는 연산자고 >> 이쪽 방향도 있지만 안 쓴다고 하셨다.

5 << 3

5를 2진수로 바꾸면 101, 이걸 왼쪽으로 3칸 밀어, 빈자리에 0을 채우는 연산자, 그러니까

10100 → 40

이걸 뭐 어디다 쓰냐? 라고 하시면서 빌드업 하셨던 것의 결론이

 

왼쪽 : 1
가운데 : 2
오른쪽 : 3

글자.정렬 : 3; 오른쪽 정렬
이런식으로 목록의 갯수가 단순하면 상관 없으나

이탤릭 : 1 << 0 = 1
굵게 : 1 << 1 = 2
밑줄 : 1 << 2 = 4

글자.속성 : 3; 이탤릭 + 굵게
글자의 속성(예시) 등과 같이 목록의 갯수가 많은 경우 즉 다중선택 문제에서 사용한다고 하셨다.

근데 아직 우리가 배운걸로는 활용을 못한단다.

 

-논리연산자

놀이공원 사장님이 놀이기구 탑승 조건의 부합한 사람만 탈 수 있게끔 하는 프로그램을 만들어달라는 요청을 해왔다.

이런식으로 키, 몸무게, 나이 등의 값을 받아 boolean을 이용해서 탑승 가능, 불가능 판정을 내리는 프로그램을 말이다.

 

논리 연산자의 종류는 다음과 같다.

초과, 미만, 이상, 같다, 다르다, 이하

>       <       >=     ==     !=         <=

 

a = 키 150이상 전용

b = 5살 미만 전용

c = 3살만 탈 수 있는 전용

d = 4살만 못 타는

e = 나이가 홀수만 탈 수 있는

(나이를 2로 나눈 값의 나머지가 1이면 홀 수 이기에 위의 %로 식을 만듬.)

 

f = 홍길동만 탈 수 있는 (오... 홍길동 아버지가 만든 놀이공원인건가..)

아무튼 만들라니까 이름 받는 칸 추가해주고

생각나는대로 ==을 이용해서 했더니 안 되길래 '아.. 이거 빌드업이네..' 라고 생각했다.

(이름에 홍길동을 적어도 false가 뜬다.)

 

그렇게 다시 나오는 참조형과 기본형

전날 수업에서 참조형은 heap, 기본형은 stack 영역으로 저장이 된다고 했다.

연산자는 stack 영역에 해당하는 걸로만 계산을 하는데 홍길동은 String이라는 참조형 변수에 해당하여 값은 heap에 있고 stack에는 주소만 있어서 대조되지 않아 false가 나오는 것이다.

 

boolean f = name.equals("홍길동"); 이라 쓰면 true 값이 나온다.

(연산자에는 변수형과 참조형이 따로 없지만 equals는 Java에서 따로 만들어 놓은 기능이라고 하셨다.)

오늘 이꼴이라는 단어가 콩글리쉬인걸 알았다.

 

"다음은 이거 한번 해보십쇼"

g = 나이가 5살이고 키도 150cm 넘어야 타는 놀이기구

'쉽지 뭐.. 음.. 2개요??' 라고 생각이 들 때 논리결합연산자에 대해 알려주셨다.

 

-논리결합연산자

 

~고(and) - &&

~거나(or) - ||(pipe 2개)

 

그러니까 위의 g는 이렇게 써야한다.

그 다음

 

h = 키가 130cm 이상이고, 나이도 80 이상이어야 타는

i = 나이가 5살 미만이거나, 키가 80cm 초과여야 타는

이 두가지를 만들라고 하셨다.

이게 무슨 이상한 조건이지 하는 생각이 들지만 '쉽네..' 하고 적어갔다.

이렇게 적었는데 이번 볼은 커터쯤 된다면서 여지없이 다 틀렸단다.

 

논리결합연산자에는

&&와 ||도 있지만

&와 |도 있다고 한다. (기능이 별로라 안 쓰고 개발자들도 잘 모른단다.)

&와 |는 앞에 것이 틀렸던 맞던 끝까지 체크를 하는 기능인데 반해 &&와 ||는 앞에서 연산을 걸러서 연산 횟수를 줄일 수 있기에 두개 짜리를 쓰는 것. (and 일 경우 앞에 것이 false면 뒤에 것을 굳이 보지 않음.)

 

"아무튼 나이가 80 넘는 사람이 놀이공원을 올까?"

결론은 age >= 80을 앞에 놓고 쓸데 없이 키 130cm 이상을 확인하는 연산 횟수를 줄였어야 했다.

밑에 i 또한 같은 논리로 앞, 뒤를 바꿔야 했다.
정확히 말하면 틀린건 아닌데 이런데서 실력 차이가 나는 것이라 하셨다.

 

쉽게 보자면 &&(확률 낮은 것 앞으로 배치), ||(확률 높은 것 앞으로 배치)

 

다음은 이걸 만들어보란다.

 

j = 키가 100cm 이상이고, 키가 150cm 이상이어야 타는

k = 3 < 나이 < 10 이어야 타는

 

밑에 건 boolean k = (age < 10) && (age > 3); 일거고 위에는 딱 봐도 뭔가 이상하다.

놀이공원 사장이 저런 말을 한다면 "예? 뭔 말입니까?"를 먼저 해야된다고 하셨다.

(실제로 이상한 주문을 넣는 사람들이 있기에 해주신 말인 듯 하다.)

아무튼 걸러서 듣고 만들자면 결국 150cm 이상이 되어야 된다는 말.

 

다음은

i = k 탈 수 있는 사람은 못타고, 저거 못타는 사람만 타게.

또 못 푸는거 던져주시고 개념 설명 해주셨다.

반대(not) - !

boolean i = !k; 이렇게 쓰인다.

 

m =  나이가 20살 이상이거나, 키가 150cm 이상이거나 둘중에 하나만 맞아도 가능.

'또 그러시네'라고 생각했다.

 

exclusive OR(배타적 OR) - ^

A  B
o  o -> x
o  x -> o
x  o -> o
x  x -> x

이런 의미라고 하셨다. (음.. or이랑 다를게 뭐였는지 기억이 안 난다.)

 

이제는 true, false로 나오는게 아니고

나이가 20살 이상이면 어서오세요, 아니면 나가가 출력 되게 해보자 하셨다.

 

단항 연산 : !(not) 하나로 가능.

이항 연산 : 대부분 a + b 등 2개 가지고 연산

삼항 연산 : 조건 따져서 값을 정할 때 - 다음에 배울 조건문 if와 같지만 간단한 문항이라면 if와 else를 쓰는 것 보다

[조건식 ? 조건을 만족했을 때의 값 : 불만족했을 때의 값] 이렇게 쓰는게 효과는 같고 훨씬 간결하다고 하셨다.

 

100 < 키 < 150 이면 타, 아니면 나가

이렇게 말이다.

 

그리고 금요일이니까 진도는 여기까지라며 강사님의 얘기를 해주셨다.

코딩을 잘하고 싶은지 혹은 결과만 만들어내고 싶은지를 생각해보라 하셨다.

 

정말 잘하고 싶다는 생각이 있으면 강사 본인의 길을 따라오라 하시면서 정보올림피아드 대회 얘기가 나왔다가

우리가 배운 것들로 풀 수 있는 수준으로 문제를 다운그레이드 시켜서 풀어보라하셨다.

참고로 저 대회는 4시간 동안 진행 되는데 10문제가 나오고 모두가 그 10문제를 다 못풀고 나온다 하셨다.

 

문제 1. 자전거 이동거리를 계산하는 프로그램을 만들어라.

(앞바퀴와 뒷바퀴의 사이즈는 같다.)

 

바퀴 둘레 :

앞 기어 톱니 수 :

뒷 기어 톱니 수 :

발 구른 횟수 :

------------------------

이동 거리 :

 

강의실에 있던 모두가 자전거 굴러가는 원리를 제대로 몰라서 자전거에 대한 공부를 하는 진풍경이 벌어졌었다.

다시 못풀 것 같아서 캡처를 해뒀었는데 사라졌다.. 문제를 혼자 다시 풀려면 한참 걸리기에 이번 주말에 다시 풀어 봐야겠다.

 

문제 2. 비만 판정

- 비만도 검사

- 이름 입력

- 키 입력

- 몸무게 입력

- 표준체중 : (키 - 100) * 0.9

- 비만도 계산식 : 실제몸무게 / 표준체중 * 100

-XXX 씨는 (비만도 > 120)비만입니다 or 정상입니다.

 

나는 비만이었다.

저번에 배운 Java 실행 파일 만드는 법으로 cmd 프로그램 까지 만들었다.

뿌 - 듯

첨부파일로 업로드 해놨으니 혹시 해보고 싶은 사람이 있다면 openjdk 1.8을 다운 받고 써보시면 되겠다.

 

그리고 중간에

height 값을 받는 곳 밑에 이런게 있는데 이 악물고 미터 단위로 입력하는 사람들을 대비해서 강사님이 주신 보너스다.

 

이것 또한 주말에 다시 만들어 볼 예정이다.