본문 바로가기
활동정리/SPG 교육일지

[교육일지] 자바 기초교육 회고

by 잔디🌿 2024. 9. 17.

    교육 목표

    자바 기초교육은 내가 교육부장이 된 후 처음으로 하는 교육이었다. 그만큼 정말 열심히 준비하였다!

     내 교육 목표는 시간을 내서 내 교육을 들으러 온 모든 학생들에게 확실하게 얻어가는 것이 있도록 하는 것이었다. 그러기 위해서 가장 중요한 것은 난이도조절이라고 생각했다. 개발자 컨퍼런스 등에서 내 수준에 비해 너무 어려운 수업을 들으면 집중력이 떨어져 나중에 기억나는 내용이 전혀 없었던 적이 있었기 때문이다.

    그래서 나는 코딩을 처음 시작했을 때 어땠는지부터 떠올렸다. 나는 선생님께 1대1로 배웠음에도 이해하기 어려운 부분이 많았던 것 같다. 입출력 조차도 많이 헷갈렸던 과거를 생각하면 정말 하나하나 천천히 가르쳐야겠다고 생각했다.

     

     

    교육 자료

    자료 만드는 것은 생각보다 매우 오래걸렸다. 만들다보니 너무 힘들어서 있던 거 그냥 쓸걸.. 이라는 생각도 들었지만 시작했으니 끝까지 만들어야지라는 생각과 이 자료를 탄탄하게 만들어서 내년, 내후년 후배들도 도움을 받을 수 있도록 하자! 라는 생각으로 버텼다

     

    또한 나는 주로 인텔리제이를 쓰는데 조사를 해보니 컴퓨터프로그래밍1 과목에서는 이클립스를 사용한다고 했다. 그래서 빠르게 이클립스 사용법도 공부했다.

     

    내가 설명하는 각 개념에 대해서는 직접 코드를 만들고, 이를 실행한 결과를 함께 캡쳐해서 넣었다.

    코드를 직접 보여주면서 설명하는 것이 말로만 듣는 것보다 훨씬 이해가 쉽고, 한줄한줄 설명이 필요한 부분은 주석으로 달아두면 더 보기 편하기 때문이다.

    슬랙

    이제까지 슬랙을 써 본 적만 있지, 만들고 관리하는 경험은 이번이 처음이었다. 처음에는 어려울까봐 겁먹었지만 생각보다 너무 간편했다. 또한 학생들이 아마 처음 써보는 플랫폼일텐데 어려워하지 않을까 걱정했는데 다행히 모두 잘 따라왔다.

     

    교육 장소

    교육은 실습실에서 진행되었다. 넓었는데 마이크가 있어서 다행이었다. 

    나는 처음에 당연히 다들 개인 노트북을 가져올 줄 알고 일반 강의실에서 진행해도 되지 않을까? 라는 생각을 했었는데 생각보다 실습실 컴퓨터를 쓰는 사람이 좀 있었다. 교육은 꼭 실습실에서 진행해야한다는 것을 깨달았다.

    생각보다 많이 교육을 들으러 와주었다!

     

    교육 1일차

    백준 설명

    기본 문제가 백준에 많이 있고, 동아리 친구들이 백준을 많이 아는 것 같아서 이번 교육에서는 백준에 있는 문제를 푸는 것으로 정했다.

    백준이 뭔지 모르는 친구들이 많을 것 같아서 백준에 대해서 소개했다.

    그리고 spg 자바기초교육 그룹을 만들어 교육 때 사용하는 문제들을 정리해두었다. 

    이렇게 교육 날짜별로 파트를 나눴다!

     

    자바를 배우는 이유

    나는 새내기 때 프로그래밍을 배우는데 이 언어가 어디에 쓰이는 걸까? 에 대한 궁금증이 있었고, 배우는 이유를 알아야 학생들이 더 의욕을 가질 것 같아서 이 페이지를 넣었다.

     

    이클립스에서 프로젝트 생성하기

    사실 좀 부끄러운 이야기이긴한데 나는 대학 오기 전에 굉장한 컴맹이었다. 그래서 다른 친구들은 파일 잘만 만드는데 나는 컴파일 할 수 있는 파일을 만드는 것 조차 어려웠던 기억이 있다.

    이번 교육을 듣는 학생들 중 분명 나같은 학생이 있을 것이라고 생각했다. 그래서 프로젝트 만드는 방법부터 설명했다.

    역시 이 부분을 어려워하는 친구들이 많았다

    그리고 이클립스 환경이 제대로 설치되어있지 않은 학생들이 있으면 시간관계상 이를 모두 해결해줄 수 없으므로 온라인 컴파일러 링크도 주었다. 이 부분도 잘 사용했다!

     

    java 코드 구조

    처음 기본 화면을 만나면 어디에다가 코드를 쳐야할지 많이 헷갈린다. 때문에 어디 부분에다가 코드를 짜야하고 이 부분이 의미하는 것은 뭔지를 설명했다(main에 관하여)

     

    또한 print와 println에 관해서도 설명했다.

     

    HelloWorld 문제풀이

    위에서 배운 내용을 바탕으로 풀 수 있는 문제인 helloword를 풀어보았다.

    내가 처음 백준 문제를 풀었을 때 맞았는데 왜 틀렸지? 라는 생각을 엄청 많이 했었다. 그 이유는 대부분 느낌표나 대소문자 등의 디테일한 부분을 놓쳐서인 경우가 많았다. 그래서 이 부분에 대해서 다시 한번 설명했다.

    문제 채점 결과에 대해서도 설명해주었다. 틀렸습니다는 코드는 제대로 돌아가지만, 테스트케이스가 틀렸다는 의미이고, 런타임에러는 코드자체에 에러가 있다는 것을 중심으로 알려주었다.

     

    변수

    변수라는 개념을 어떻게 설명해야할지 고민하다가 이전 교육 자료를 보고 좋아서 가져왔다

    변수를 박스에 비유했는데

    변수의 타입은 정하면 바꿀 수 없고, 값은 바꿀 수 있다는 것을 잘 나타낸 것 같았다.

    변수 선언 방법도 알려주었다.

     

    변수의 명명규칙도 설명했다. 코딩 초보시절 분명 틀린 부분이 없는데 왜 오류가 나지 해서 보면 위 규칙을 지키지 않아서인 경우가 있어서였다.

     

    자료형

    자료형에 대해서도 설명했다. 

    기본형과 참조형의 차이와 boolean, char 등의 각 자료형의 특징에 대해서 설명했다.

     

    변수 출력

    printf에서 변수를 출력할 때에는 자료형에 따라서 설정해주어야 할 것이 있다. 

    java보다 c언어에서 더 많이 쓰이긴 하고, 실제 프로젝트에서 잘 쓰이진 않지만 알고리즘 풀 때에는 필요할 때가 있어서 설명했다.

     

    입출력

    다음은 입출력에 대해서 설명했다.

    나는 자바를 배우기 시작할 때 부터 bufferedReader를 사용했어서 scanner사용법을 잘 몰랐었는데 이번에 학생들은 수업에서 scanner을 쓰는 것 같아서 이를 배워서 가르쳐줬다.

     

    import는 기본 세팅에 들어가지 않으므로 꼭 써줘야한다는 것도 설명했다. 이를 하지 않으면 scanner을 비롯한 다양한 기능을 사용할 수 없기 때문이다.

    또한 코딩을 처음 할 때에는 대소문자 때문에 오류를 내는 경우가 많다. 이를 방지하기 위해 관련 설명도 했다.

     

    자료형에 따라서 사용해야하는 함수가 다르다

     

    scanner을 사용할 때에 nextLine() 등의 키보드에서 정보를 얻는 함수를 사용하면 이 값을 넣을 변수가 필요하다. 실수하지 않도록 주의해야한다.

     

    연산자

    다음은 연산자이다.

    아직 2진수 등 비트에 관해서는 학생들이 배우지 않았고, 설명하면 헷갈릴 것 같아서 당장 필요한 요소만 알려주었다.

     

    내가 처음 프로그래밍 할 때 헷갈렸던 부분이다. int끼리 나눗셈을 하면 나머지는 버려지고 정수만 나온다는 것을 설명했다.

     

    만약 소수점까지 나오는 것을 원한다면 double로 선언해줄것!

     

    또한 알고리즘 문제를 푸는 데 많이 나오는 비교연산자도 설명했다. =이 < 나 >보다 뒤에 와야한다는 것을 강조했다.

     

    논리연산자에 대해서도 설명했다. 이를 잘 보여주기 위해서 이에 맞는 코드와 결과물도 함께 보여주었다.

     

    사칙연산 기본문제를 풀도록 하였다. 입력을 배운지 얼마 안됐기 때문에 어려울 것 같아서 여기에 시간을 많이 쓰지 않고 사칙연산 개념에 더 집중하여 문제를 풀 수 있도록 힌트를 주었다.

     

    정답 코드도 직접 짜서 올려줬다.

     

    이렇게 첫 날 교육이 끝났다! 처음에는 많이 긴장되었지만 갈수록 긴장이 풀려서 하고 싶은 말을 다 했던 것 같다

    또한 2시간 내에 다 끝낼 수 있을까 걱정했는데 시간이 딱 맞아서 기분이 좋았다.

     

     

    교육 2일차

    1일차 복습

    2일차 교육에 오시는 학생분들 중에 1일차에 오지 않으신 분들이 있을 것 같아서 간단하게 복습을 했다.

    형변환

    형변환은 기본형끼리의 형변환과 참조형과 기본형끼리의 형변환으로 나누어서 설명했다.

    char형태를 int형으로 변환하면 ascii 코드에 있는 숫자로 변환된다는 것을 알려주었다.

     

    이 부분은 BufferedReader을 사용하면 많이 사용되는 함수이다. 이 김에 scanner과 BufferedReader의 차이를 한번 설명했다.

     

    조건문

    조건문은 너무 중요해서 더 자세히 설명했다.

    우선 if문부터 설명했는데, if문 내의 식이 true가 아니면 if절 자체를 건너뛰고, true이면 if문을 실행한 후 다음 코드로 넘어간다고 하였다.

     

    이를 더 잘 이해하도록 하고, else문을 설명하기 위해 위 코드를 넣었다. 바로 보여주는 것 보다 한번 생각해보도록 하는 것이 효율적일 것 같아서 퀴즈를 냈다.

     

    else if문을 설명했다. if문과 마지막 else문까지가 세트이고, 모든 if와 else if문을 통과하지 못했을 때에는 else문에 들어간다고 알려주었다.

     

    첫번째 예시는 단순히 변수와 정수를 비교하는 if문이었다.

     

    두번째 예시는 이를 활용하여 짝수와 홀수를 구별하는 조건문을 만들었다. 위와 같이 연산자를 사용한 조건문도 만들 수 있다는 것을 보여주었다.

     

    이를 활용한 백준문제를 가져왔다. 이번에도 입력에 시간을 너무 쓰지 않도록 이에 대한 힌트는 주었다.

     

    정답 코드를 주었다. 동시에 char형태는 ''를, string은 ""를 써야 하는 것도 설명했다.

     

    반복문

    다음은 반복문이다.

     

    while문

    while문부터 설명하였다. while문의 특징은 특정 변수를 while문 안에서 변형시켜 while문을 언젠가 종료할 수 있도록 해야 한다는 것이다.

     

    do while문

    while문과 do while문의 차이를 중심으로 설명했다.

     

    for문

    사실 for문을 설명하는 것이 가장 어려웠다. for문은 배운지 너무 오래되어서 기계적으로 쓰고있었기 때문이다.

    위 그림은 이전 교육부장님의 자료에서 가져왔다. 변수 초기화를 하고, 조건을 확인한 후 문장을 수행한 다음 증감하는 과정을 잘 설명한 것 같다.

     

    조건문에서 주의할 점을 알려주었다. 보통 for문은 0부터 시작하는 경우가 많은데 이 이유가 컴퓨터는 주로 숫자를 0부터 세기 때문에라는 것을 설명했다.(배열도 0부터 시작해서 알고리즘 풀 때 유리하다는 것도 알려주었다.)

    또한 0부터 시작할 때에는 조건문에 <=가 아닌 <를 사용해야한다는 것도 이야기했다.

     

    반복문 예제이다. 0부터 시작하고, 5보다 작다(작거나 같다 아님)을 해야 원하는 횟수만큼 출력된다는 것을 설명하고자 했다.

     

    또한 반복문과 조건문이 섞인 코드도 보여줬다. 위 예제는 짝수 또는 0일때만 출력된다.

     

    반복문을 사용한 문제를 주었다.

    위 문제는 반복문을 사용하여 원하는 횟수만큼 숫자를 입력받고, 이 두 수를 더한 값을 출력하도록 하는 문제이다.

    이제까지 알려준 입출력, 사칙연산, 반복문을 모두 쓰는 문제이다. 어려워할까봐 걱정했지만 생각보다 다들 잘 풀어주었다.

     

    정답코드를 보여주며 한번 더 설명했다.

     

     

    다음 문제이다. 주어진 수만큼 1부터 n까지 더하는 문제인데, 사실 교육을 듣는 학생들은 새내기가 많아서 고등수학을 접한지 얼마 안된 친구들이라 공식을 사용해서 문제를 풀 것 같았다. 그래서 반복문을 꼭 사용하라고 강조했다ㅎㅎ

     

    나도 옛날에 많이 한 실수인데, 프로그래밍을 처음 학교에서 가르칠 때 ~를 입력하세요같은 입력 유도문을 쓰도록 하는 경우가 많다. 그런데 백준 플랫폼에서는 원하는 출력 형식이 아니면 틀렸습니다를 출력하기 때문에, 코드는 맞았어도 입력유도문같은 다른 문자가 있으면 틀렸습니다를 출력한다. 그래서 이를 쓰지 않도록 미리 이야기해주었다.

     

    다중반복문

    다음은 다중반복문을 설명했다.

     

    다중반복문은 반복문 내에 반복문이 있는 형태이다. 밖에 있는 반복문은 안에 있는 반복문이 모두 끝났을 때 돌아간다는 것을 설명하기 위해 i와 j를 숫자로 출력한 것을 보여주었다.

     

    처음 다중반복문을 배울 때 가장 많이 하는 구구단 출력을 해보도록 하였다.

     

    정답코드

     

    continue와 break

    continue문을 설명할 때에도 i를 출력하는 코드를 보여주었다. continue를 만나면 해당 for문의 처음 부분으로 돌아가기 때문에 i가 짝수일 경우에는 출력이 되지 않는다는 것을 보여주었다.

     

    다음은 break문이다. 9까지 출력되게 하였지만, if문 내의 break에 걸려서 6까지만 출력되는 것을 보여주었다.

     

    switch문

    다음은 switch문이다. switch문의 편리성을 보여주기 위해서 우선 if문을 사용해서 해당 기능을 구현해보았다.

     

    그 다음 switch문을 알려주었다. 꼭 break문을 사용해야한다고 강조했다!

     

    연습문제로 별찍기를 주었다. for문이 돌 때마다 i값이 변화하는 것을 잘 이해하고 활용할 수 있어야 하는 문제라 가져왔다.

     

     

    역시 어려워하는 친구들이 많았다. 특히 줄바꿈의 과정을 많이 어려워하고, 이중 for문에서의 조건 설정을 힘들어했다.

    그래서 이 부분은 정답 코드를 보여주며 코드가 돌아가는 과정을 하나하나 설명했다.

     

    위 과정을 잘 이해한 친구들을 위해 더 어려운 문제도 가져와봤다. 이걸 푼 친구들도 있었다 대단하다!!

     

    이렇게 2일차도 끝났다.

     

    교육 3일차

    드디어 마지막날이다. 사실 3일차에는 내가 일이 있어서 교육차장님께 자료만 드리고 교육을 맡겼다.

    친구들이 이 문제들을 잘 따라왔을까 궁금했는데 직접 보지 못해서 아쉽다. 

    모든 문제들은 1,2일차 교육 때 배운 내용으로 풀 수 있는 다양한 난이도의 문제를 준비했다.

    사실 다른 개념들을 더 알려줄수도 있었지만 직접 코드를 짜보는 것 만큼 위 개념들을 확실히 익힐 방법은 없다고 생각했고, 백준을 풀면서 프로그래밍에 흥미를 느낄 수 있도록 하기 위해서 마지막날은 문제풀이만 하도록 했다.

     

     

    R2

    이 문제를 풀기 전 사칙연산 복습을 했다.

    이 문제는 두 수의 평균과 그중 하나의 수가 주어졌을 때 나머지 하나의 수를 구하는 문제이다.

    적당한 수학적 응용과 이를 코드로 반영하는 능력이 필요하다

     

                     

    수식과 함께 정답코드를 보여주었다.

     

    윤년

    이 문제는 많은 컴공 새내기들의 머리를 아프게 하는 문제이다. 이 문제를 풀기 전 if문을 한번 설명했다.

                                                                         

     

    \

    and와 or도 설명했다.

     

    윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때를 의미한다. if문과 ||,&&를 적절하게 쓰는 문제이다. 

     

    정답코드는 이러하다

     

    평균점수

    이 문제는 40점 미만의 학생들의 점수는 모두 40점으로 만들고 모두의 점수 평균을 구하는 문제이다.

    원래 이런 문제는 for문을 사용하여 반복되는 과정을 처리해야하지만, 아직 배열을 배우지 않은 관계로 변수 5개를 만들어서 하나하나 확인하도록 하였다. 이 때 모든 if문을 돌아야하므로 else문을 사용하지 않아야 한다는 것을 강조했다.

     

    주사위 세개

    이제 조금 어려워진다.

    조건문을 정말 전략적으로 사용해야하는 문제이다. 세개 다 같은 경우 -> 두개만 같을 경우 -> 모두 다를 경우 순서대로 확인해야한다.

    정답은 위와 같다. Math.max를 활용하면 훨씬 편하겠지만 아직 배우지 않았으니.. 위와 같이 복잡하게 풀이했다.

     

    별찍기 4

    다음은 for문을 활용한 문제이다.

    마찬가지로 for문을 한번 복습한 후

     

    별찍기를 설명했다. 이 문제는 for문 내에서 i값의 변화에 집중해야하는 문제이다.

    규칙을 잘 찾을 수 있도록 하기 위해 위와 같은 그림을 그렸다. i가 0일 때 별이 5개여야하고, i가 1이면 공백 1개, 별이 4개여야한다. 

    위에서 공백은 i개, 별은 입력받은 수 -i 개 있어야 한다는 것을 알 수 있다.

     

    정답코드이다!

     

    느낀점

    이렇게 모든 교육이 끝났다!! 오예

    준비하는데 정말 오랜 시간이 걸렸고, 힘들었지만 그동안 잊고있었던 프로그래밍의 기초적인 부분을 복습할 수 있어서 좋았다. 그리고 어떻게 설명해야할지 생각하는 능력도 많이 길러진 것 같다. 앞으로 개발자로서 많이 필요하다고 느끼는 영역인데 이번에 얻을 수 있어서 좋았던 것 같다.

    사실 나라면 수업 끝나고 저녁시간에 또 수업 듣기 힘들었을 것 같은데 다들 교육에 너무 열심히 참여해줘서 진짜 고마웠다. 앞으로 더 좋은 것을 가르쳐주고싶다는 욕심이 생긴다. 남은 교육도 잘 준비해보아야겠다.