기능을 봤던 하루 20210909

DUUUPPAAN·2021년 9월 10일
0

교육 첫 달 202109

목록 보기
9/13

·유난히 일어나기 힘들었던 하루

-수업 중에 졸릴까봐 매일매일 마시는 커피 2~3잔이 독이 되었는지 전날 잠을 많이 설쳤다. 업친데 덮친격으로 어제 배운 여러가지 것들이 이해가 가지 않아서 스스로 다른 강의를 찾아보며 부족한 부분을 채우고 나니, 1시가 넘은 시간에 운동이 끝났고, 씻고 누우니 1시 40분이 훌쩍넘었다. 커피로 인해 잠들지 못한 것까지 합치면 2시 반은 넘어서 잔 것 같다. 오늘은 대면 수업이었는데, 상태는 정말 안좋았다. 7시에 알람소리가 얼마나 무겁던지... 겨우겨우 일어나서 학원까지 갔다. 물론, 날 힘들게 한 그 커피 한 잔을 사들고 갔다.

·나만의 나머지 공부의 효과

-아침에 가자마자 주민번호를 체크하는 코딩을 스스로 처음부터 차트를 짜서 만들었다. 물론 중간중간 오류가 있었지만 다 체크하면서 오류를 없앴고, 확실하게 이해하면서 만들었고, 결과는 제대로 출력되었다. 어제 시간이 너무 부족해서 제대로 보지 못했다고 생각했는데, 다행이었다.
그리고 더 다행인 것은 오전의 수업이 정말 뚜렷하게 이해가 됐다. 인자를 받는 매개변수를 이해하고, 배열을 이해하니, 수업을 들을 때 정말 훨씬 수월했다. 선생님께서는 아직 매개변수 인자 이런 단어들을 확실하게 알 필요 없이 넘어가는 게 더 낫다고 하셨지만, 내 입장에서는 저게 무엇인지 확실하지 않다면, 내가 코드를 봐도 이해할 수가 없는 것 같았다. 그러나 혼자 찾아본 공부가 도움이 되었고, 어떤 부분이 무엇을 받고 있고, 그 받은 부분에서 어떤 부분을 변수에 넣고 이런걸 하나하나 따지니 주변에서 갸우뚱하고 있어도 잘 이해가 되었다.
쉬는 시간에도 이해가 가지 않는 부분을 질문하면서, 나머지 공부의 효과를 톡톡히 느꼈다.

·select 복수선택 받기

  <form>
	<fieldset>
		<legend>언어능력</legend>
		<select id="ss" multiple="multiple">
			<option value="한국어">한국어</option>
			<option value="중국어">중국어</option>
			<option value="일어">일어</option>
			<option value="영어">영어</option>
			<option value="아랍어">아랍어</option>
		</select>
		<input type="button" value="확인" onClick="check(ss);"><!--C 소문자도 괜찮은데 앞으로 자바할거면 습관들이자 뒤에 글자 첫음꺼는 대문자-->
	</fieldset>
  </form>

다음과 같은 form이 있다고 하자.
전날 했던 방식으로 이 다중선택지의 값을 받으려면, for와 if를 활용해서,
변수 하나에 계속 +해주면 된다.

  <script>
  	function check(ff){
		var result = "";
		for (i=0;i<ff.length;i++ )
		{if(ff[i].selected){
			result+=ff[i].value+"," }/*result에 값들을 일일이 하나씩 넣는다.*/
		}
		document.write(result);
		
	}
  </script>

그러나 오늘은 배열과 함께,push를 사용하여 여러 값들을 불러와봤다.

  <script>
  	function check(ff){
		var result = [];
		var options = ff
		var opt;
		ilen = options.length; 
		for (i=0;i<ilen;i++ )
		{	opt = options[i];
			if(opt.selected){ result.push(opt.value) }
		}
		for (i=0;i<result.length ;i++ )
		{document.write(result[i]);
		document.write("<br>");
		}
		
	}
  </script>

이해를 위해서 위처럼 진행해봤다. 그러나 사실, 되게 쓸모없는 스탭이 많은 것도 사실이다. 변수가 너무 많아져서 자칫 더 헷갈리는 것 같았다.
개인적으로는 이후에 진행한 부분이 더 나에게 맞았다. 이 부분은 내가 먼저 수정하고, 선생님께서 다른 방식도 있다면서 내가 수정한 것과 같은 느낌으로 작성해서 보여주셨다. 뭔가 뿌듯했다. 앞서간 느낌이랄까...

  <script>
 	function check(ff){
	var result= [];
	for(i=0;i<ff.length;i++){
   	if(ff[i].selected){
       result.push(ff[i].value)
       }
       document.write(result);
   }
  }
  </script>

이런 방식으로 굳이 변수를 주지 않고, select의 name인 ss 인자를 그대로 받은 매개변수자체를 사용해서 진행하면 헷갈릴 일도 적고 더 적은 줄로도 같은 결과를 얻을 수 있다.

·급격하게 안좋아진 몸상태

-오전수업과 점심시간이 지나고, 3시쯤 되었을 때, 갑자기 손이 떨리고 어지럽고 매스꺼워졌다. 무슨 일인지는 몰랐었고, 코로나인가 싶었는데, 쉬는시간에 여자친구가 요즘 운동도 열심히 하고 열심히 머리를 써서 당이 떨어진 것 아니냐고 했는데, 정말 다행히도 챙겨간 사탕을 한 개 먹으니 괜찮아졌다. 안타깝게도 그게 오후 수업이 다 끝나고서였지만....

-그래도 최대한 버티면서, 수업을 들었다. 오후 수업은 그냥 작성해놓으신 코드를 타이핑해보라고 띄워주셨고, 타이핑하고, 이게 왜 그렇게 되는지 설명을 듣는 정도였다. 뭘 배웠다? 라고 말하기 어려웠다. 개인적으로 무엇인가를 배웠다라는 수준에 가려면, 내가 언제든 꺼내서 쓸 수 있다의 수준까지 가야한다고 생각한다. 오늘은 배웠다라기 보다는 이런 기능이 있다를 본 수업이었다.

수업이 끝나고 혼자서 다시 작성해보았지만, 이게 내 것이다 라는 느낌은 아직 없다. 아마 오늘 처음 접해본 기능들이어서 그럴 수도 있지만, 기능을 설명해주시고, 어떻게 만들면 좋겠냐 정도의 질문과 먼저 해볼 시간을 주셨으면 더 좋았지 않았을까 싶다. 이미 정답이 제시된 느낌이여서, 스스로 응용해보기도 쉽지 않았다.

배운(?) 기능들은 참 많았다. onclick의 기능으로 현재 창을 닫거나, 현재 창을 띄워준 창을 닫는 self.close(); opener.close();
하이퍼링크를 통해 자바스크립트 부분의 함수를 바로 불러오는 것도 해봤다.

<a href="Javascript:function();">

위와 같은 a태그로도 함수를 불러올 수 있었다.

window.open의 사용처도 여러번 보여주셨지만, 아직 window.open()의 괄호 안에 어떤 것들을 넣어야 되고 넣을 수 있는지 확실하게 알려주시지 않아서 따로 찾아봤다. 근데 또 수업시간에 한 것이랑 찾아본 내용이 상이해서 아직 스스로도 헷갈리는 것이 너무 많다.

변수에 new연산자와 Date()를 대입해서, 변수.getFullYear() 부터 시작해서 변수.getSeconds()까지 이용해봤다. 현재 날짜와 시간을 불러주는 기능은 그다지 어렵진 않았다. 특히, getMonth()를 사용해서 현재 달을 표시하고 싶으면 +1을 해줘야 한다고 하셨다. 그 이유는 달은 index의 초기 값이 0이여서라고 하셨는데, 그럼 년도와 Date()의 index는 1부터 시작인가? 라는 의문이 있었다. 몸 상태가 좋아서 쉬는시간에 엎드려있어야 하지만 않았어도 바로 물어보고 궁금증을 풀었을텐데 아쉽다.

그 외에도 태그 안에 style=""을 넣어서 바로 css를 사용하는 방법, setTimeout(,);,와 등의 기능을 활용하는 코드도 봤다.

또 버튼을 누르면 화면을 검은색으로 바꾸는 for문을 이용한 함수도 봤는데, for문을 저렇게 사용해서 배경색을 변경할 수 있구나 생각했다. 한번에 바꾸지 않고, 변수에 값을 계속 0까지 내리거나, 15까지 올려서 15인 경우 f로 바꿔주는 식으로 해서 rgb 컬러 값을 얻어내는 함수는, 아직 내가 생각할 수 없는 수준인 것 같았다. 그 코드를 보면서, '아... 프로그래머적인 시각과 사고가 정말 중요하겠다'라는 생각을 했다. 아직 반복문이 익숙하지 않아서, 배경색을 변경하는데, 함수와 반복문을 사용했다는 점이 굉장히 흥미롭고, 나의 좁은 시각을 깨어나게 했다.

·별그리기

-마지막으로는 별그리기를 진행했다.

for안의 for을 넣어서 별을 첫 줄에는 한 개, 두번째 줄에는 두 개.....10번째 줄에는 10개를 타이핑하는 함수를 만드는 것이다. 물론, 전에 해보기도 했고, 이해도 했어서 그것은 금방했다.

	function sy(){
		for (i=1;i<=10 ;i++ )
		{ for (j=1;j<=i ;j++ )
		{	document.write("*");
		}
			document.write("<br>");
		}
	}

그러나 다음 문제는 좀 달랐다.
그렇다면,



(중략)


**

  • 위처럼 10개에서 줄어드는 코드는 어떻게 만들까?
    처음에는 쉽다고 생각했다. 밖에 있는 for의 i부터 숫자와 조건, 증가치를 다르게 주고, j의 숫자와 조건 증가치를 다 다르게 주었다. 그리고 나서 실행했고, 동일한 결과를 얻었다.
    그런데 문득 그런 생각이 들었다...
    이렇게 몇번찍을지 바뀔 때마다 함수를 통째로 바꾸면, 함수를 쓰는 이유가 무엇일까...
    같은 별을 찍는 함수인데, 전체를 다 바꿀 필요가 있을까? 만약 10번찍는 것이 아니라, 9번 찍는다거나 1000번찍는 것이면, 내가 숫자를 하나하나 다 바꿔줘야 하나? 그게 함수의 의미인가?....
    아니였다. 그렇다면, 위쪽의 i의 변수를 가진 for의 조건, 증가치가 전혀 바뀌지 않은 상태에서 두번째 for의 조건만 변경해서 동일한 결과를 얻을 수 있는 것이 맞다고 생각했다.
    공책을 펴고 두 개의 상자를 그리고, i가 1일 때, j가 어떤 수를 가져야 별을 9개를 찍을지 고민했다. i=1 일 때, j=9; 2일 때는 8, 3일 때는 7.... 결국 i가 몇이든간에, j가 10-i의 값까지 반복하면 되는 것이었다. 그러면 외부의 for의 조건을 바꾸지 않고도, 내부의 조건만 바꿔주면 되는 것이라 함수의 의미대로 사용할 수 있었다.
		function sk(){
		for (i=1;i<=10 ;i++ )
		{ for (j=1;j<=(10-i) ;j++ )
		{	document.write("*");
		}
			document.write("<br>");
		}
	}

이런식으로!

이 부분에서도 나는 아직 많이 부족함을 느꼈다. 함수를 선언하면서도, 함수의 본질적인 기능을 잊어버리면서 사고했다. 아직 프로그래머적인 사고력이 부족하다고 절실히 느꼈다.

·앞으로

오늘 느낀 것은 내가 아직 프로그래머적인 사고와 해결능력이 많이 부족함을 느꼈다. 물론 아직 배운 것이 없어서 해결능력은 부족한 것이 당연하지만, 프로그래머적인 사고력은 기능을 몰라도 이렇게 하면 되지 않을까 정도는 생각해볼 수 있을텐데,... 조금 수동적인 태도로 수업에 임하고 있는 것은 아니었나 깊게 생각해보는 계기가 되었다. 그래서 앞으로는 조금 더 먼저 생각하고, 직면한 여러 문제나 사소한 것들에서도 프로그래머라면 어떻게 할까에 대해 생각해보고 다음 일을 해보는 습관을 들여야겠다.

  1. 프로그래머라면 어떻게 생각할까. 어떻게 할까에 대해 늘 고민해보기
  2. 운동은 꾸준히 체력도 능력이다. 공부도 체력이다!
  3. 복습과 정리는 꾸준히. 이해 안가는 것은 찾아보기.
  4. 다른 강의 사이트도 종종 보면서 부족한 부분을 채우기.
profile
비전공자란 이름으로 새로운 길을 가려 하는 신입

0개의 댓글