개발공부 & 부트캠프/[부트캠프] 회고

[데이터 엔지니어링 부트캠프]8월 1주차 회고

포리셔 2023. 8. 6. 23:08

좋았던 점

  • 수요일부터 3일만 수업 들은 게 제일 좋았습...
  • 수업자료만 보더라도 강사님이 준비를 많이 해주고 계시다는 게 느껴집니다. 최소한 강의자료 코드에 있는 오타 때문에 실행이 안 되고 수강생이 알아서 디버깅을 해야 하는 불상사가 없다는 게 아주 좋습니다.

아쉬웠던 점

  • 자바가 확실히... 지금껏 접해온 언어와 비교했을 때는 많이 이질적이네요. 파이썬이 주력이고 C++은 약간?만 경험해본그마저도 학부 1학년 때 배운 게 전부인 저로서는 C와 비슷하면서도 여러모로 손이 많이 가는 자바의 문법이 아직은 좀 어색합니다.
  • 새 언어를 배울 때마다 느끼는 거지만, 문법이 서로 헷갈리기 시작합니다. 파이썬 스크립트를 짜는데 주석으로 //를 쓰고 있고, 자바에서 for문을 쓰는데 왜 enumerate()가 지원이 안 돼지? 이러고 있고...

배운 점

  • switch문 - 분기 제어문: int(byte, short, char), 문자열 자료형에만 적용 가능한 제어문으로 방식은 아래와 같습니다. 하나의 switch 문 안에 들어갈 비교값에는 제한이 없습니다. 단, 등가 비교(==, !=)만 가능합니다. 두 값의 크기 비교가 필요할 경우에는 다른 구문을 사용해야 합니다. 상황과 취향에 맞게 사용합시다!
    switch(식) {
      case 비교값1 : 
              수행문장1;
              break;
      case 비교값2 : 
              수행문장2;
              break;
      case 비교값3 : 
              수행문장3;
              break;
      case 비교값4 : 
              수행문장4;
              break;
      default:
              수행문장5;
    }

수행문장이 둘 이상일 경우 각 case문의 블록을 중괄호로 묶어야 하지만, 하나일 때는 필수는 아닙니다. 이건 for, if, while문도 마찬가지.

  • 자바에서의 반복문: 자바에는 세 가지의 반복문 for, while, do ~ while 문이 있습니다. 사실상 for, while을 90% 이상의 상황에 사용하지만, do ~ while도 상황에 따로 유용하게 사용할 여지가 있습니다.
    • for문은 횟수가 정해진 반복문에 사용하는 것이 좋습니다. 배열과 같은 데이터의 집합에서 값들을 반복 처리하는 데 사용됩니다.
    • 또한 파이썬에서는 for문이 한 가지인 것과 달리 자바에서는 두 가지가 존재합니다. 각각 'traditional for'와 'enhanced for'라고 부릅니다. 전자는 자바 1.0 버전부터 지원된, 좀 더 정확히는 C언어 계통에서부터 시작된 유서깊은 버전이고(for(초기식;조건식;증감식){}, 예시: for(int i=1;i<=6;i++) 후자는 5.0 버전에서야 추가된 근본없는? 구문입니다(for(변수 선언 : 배열 또는 컬렉션 객체). 하지만 편하죠? 일단은 traditional for문 위주로 학습을 했습니다. switch 문에서와 마찬가지로 수행문장이 하나일 때는 중괄호가 필수는 아니지만, 두 줄 이상일 경우 중괄호를 반드시 붙여서 블록을 구분해야 합니다.
    • 파이썬과 달리 자바에서는 초기식에서 사용되는 변수 i는 반복문을 벗어나는 순간 사라집니다. 파이썬에서처럼 이 변수를 그대로 가져가기 위해서는 반복문이 시작되기 전에 반복문 바깥에서 미리 변수 i를 정의하고 반복문을 작성하면 됩니다.
  • 자바 입출력: 프로그래밍에서 입력과 출력이라 함은 각각 프로그램에서 수행하는 데 필요한 데이터를 외부에서 읽어들이는 작업/프로그램에서 생성된 결과를 내보내는 작업을 뜻합니다. 이때, 입출력의 대상이 어디냐에 따라서 표준 입출력, 파일 입출력, 네트워크 입출력으로 구분됩니다.
    • 표준 입출력: 시스템이 정해놓은 표준 입출력 장치(일반적으로 표준입력장치 - 키보드, 표준출력장치 - 스크린을 의미)로의 IO를 의미합니다. 그런데 자바에서는 System.in과 System.out이라는 클래스에 이것이 정의되어 있습니다. 지금까지 써온 메서드 중 System.out.print(), System.out.println(), System.out.printf() 등이 여기에 해당합니다. 자세한 사용 방법은 IO 관련 교안에서 다루도록 하겠습니다.
    • 파일 입출력: java.io 패키지의 다양한 클래스들을 사용합니다.
    • 네트워크 입출력: java.net 패키지의 다양한 클래스들을 사용합니다.
  • 자바의 while문: while(조건식) 형태로 적어줍니다. 조건식에는 반드시 boolean 변수가 들어가야 하며, for문과 마찬가지로 실행문장이 두 줄 이상일 경우 중괄호로 묶어야 합니다. 무한루프를 쓸 때는 while(true)와 같이 쓰면 됩니다.
    • 분기 제어문 - break: switch문과 반복문 모두에 사용할 수 있습니다.
    • 분기 제어문 - continue: 반복문에서만 사용할 수 있습니다.
  • 반복문 레이블: 자바는 반복문에 레이블을 부여하여 특정 루프만 선택적으로 종료할 수 있습니다. 예를 들어 for문 앞에 unico: for(...)라고 레이블을 붙인 반복문이 있다면, break unico;라는 식으로 특정 레이블이 붙은 루프를 빠져나올 수 있습니다. 단, break문을 감싸고 있는 반복문만을 멈출 수 있습니다. break문이 들어가있는 루프 바깥에 있는 임의의 (레이블이 붙은) 루프를 멈출 수는 없습니다. 즉, 실제로 사용되는 것은 다중 루프문을 구현할 때 특정 루프를 멈추고 싶을 때 사용한다고 보면 되겠습니다.
package day3;
public class BreakTest2 {
public static void main(String[] args) {
    int result;
    unico: for(int dan = 1; dan <= 9; dan++) {
        for(int num=1; num <= 9; num++) {
            result = dan*num;
            if (result >= 30)
                break unico;
            System.out.print(dan + "x" + num + "=" + result + "\t");
        }
        System.out.println();
    }        
}
}
  • 자바의 배열
    • 배열 생성 방법: new 데이터타입[크기] 형식을 기본으로 합니다. 예를 들어 new int[5], new char[26] 등과 같이 쓸 수 있습니다.
    • 배열 사용 방법: 배열 변수를 생성한 다음 변수에 저장한 다음에 사용해야 하는데, 생성 방법은 데이터타입 변수명[] 또는 데이터타입[] 변수명으로 선언하여 정의합니다. 둘 중 어느 쪽을 사용해도 결과는 동일합니다. 즉, 예를 들어 int score[] = new int[5];int[] score = new int[5];는 동일한 배열 변수를 생성합니다.
    • 정말 얄궂게도 자바의 배열은 슬라이싱은 지원하지 않고 인덱싱만 지원합니다. 예를 들자면 score[0], score[1], $\cdots$, score[4]와 같이 쓰는 것입니다. 참고로, 인덱스는 파이썬에서와 마찬가지로 0부터 시작합니다.
    • 배열의 길이는 함수를 호출하는 것이 아니라 배열 객체의 메서드를 호출하는 방식으로 씁니다. 즉, score.length를 호출하여 길이 5를 얻는 방식입니다.
  • 메서드(method): 수행 코드를 정의하는 요소입니다. 객체의 행동 또는 기능을 구현하는 요소로, 함수와 거의 동일합니다. 이 때, 메서드는 객체에 속한 함수로 봅니다.
    • main(): 자바 프로그램 수행 시 가장 먼저 호출되는 메서드입니다(호출 주체는 자바 인터프리터(JVM)).
    • 메서드 생성 방법: [제어자...] 리턴값타입 메서드명([매개변수선언...]) [throws 예외클래스...]의 형식을 갖는 메서드 헤드와 이후 중괄호로 묶이는 메서드의 수행코드인 메서드 바디로 나뉩니다. 하나의 메서드 안에 들어가는 수행 코드의 개수에 제한은 없습니다. 하지만 웬만하면 한 메서드는 한 가지 기능만을 수행하도록 작성하는 것이 좋습니다(단일 책임의 원칙).
    • 메서드 호출 방법: 메서드명(매개변수...);의 형태로 호출하는 것이 기본입니다. 메서드 호출 시에는 해당 메서드에 매개변수가 없다고 하더라도 반드시 소괄호를 붙여줘야 합니다. 한편, 메서드의 리턴값을 두고두고 사용할 거라면 변수에 저장해서 사용하는 것도 가능합니다.(예시: 변수명=메서드명([인수...]) + 10;)
    • 아예 복합적으로 사용할 거라면 아래와 같은 예시도 가능합니다. 단, 아래 예시는 if문의 조건으로 들어가기 때문에 반드시 해당 메서드의 리턴값이 boolean이어야 한다는 조건이 붙겠죠.
if (메서드명([인수...])) {

}
  • 메서드 오버로딩(method overloading): 자바 코딩의 핵심 중 하나로, 하나의 클래스 안에 같은 이름의 메서드를 여러 개 (2개 이상) 정의하는 것을 의미합니다(파이썬은 지원하지 않음). 오버로딩할 메서드의 개수는 제한이 없습니다. 단, 그 메서드들 간의 매개변수 사양은 달라야만 합니다. 최소한 자료형이라도 달라야한다는 것이죠.

참고: 안드로이드 개발 쪽으로 가보면 메서드 오버로딩이 일상이라고 합니다.

  • 프로그램 인수(a.k.a. 명령 행 인수): 이클립스 실행에서 run 버튼 옆으로 들어가 Run configurations...를 누른 후, arguments 탭에서 원하는 인수를 넣어주면 해당 프로그램을 실행할 때 방금 입력한 그 인수들을 사용해 실행하게 됩니다. 이를 프로그램 인수라고 합니다. 웹 프로그래밍에서는 그렇게까지 큰 의미가 있지는 않지만, 단독 자바 프로그램을 만들 경우에는 의미가 있을 수도 있다고 하네요.

앞으로 바라는 점

  • 이래저래 챙겨야 할 게 많은 한 주였습니다. 자격증 공부에, 스터디 모임에, 강의 실습에... 다시 한 번 체력과 컨디션 안배의 중요성을 느끼고 갑니다.
  • 다음 주부터 객체지향 프로그래밍 파트로 넘어갑니다. 자바의 특성이 극대화되는 부분인만큼 좀 더 집중해서 들어야 할 필요가 있겠습니다.