[Intel] 13주차 회고록

LHW·2023년 10월 6일
0

Intel교육과정

목록 보기
13/15

Intel AI For Future Workforce 13주차 회고

이번주는 연휴로 왕창 쉬고 와서 너무 힘들었....다.... 하지만 다음주면 또 한글날덕분에 3일 쉬니까 열심히 해야지 😀

InterFace

이번주의 시작을 열었던 것은 InterFace였다. 언뜻 보면 구조 자체는 클래스와 같은 형태였지만, 차이점은 아래와 같았다.

  • 기본적으로 필드에 정의되는 멤버들은 static final 키워드가 생략된 상수멤버들이다.
  • 다중 상속이 불가능했던 클래스와는 다르게, 다중 상속(구현이 더 맞는말이다.)이 가능했다.
  • 실행부가 없는 추상 메소드들을 정의하고, 이를 구현 클래스에서 Overriding함으로서 일종의 설계도? 와 같은 역할을 하는 듯 했다.

필드에 정의되는 멤버들이 모두 상수라는 것에 1차적으로 당황했고, 실행부 없이 추상 메소드만 주욱 늘어놓는 형태에 2차적으로 당황했다. 또한, 머리 속에 드는 생각은 딱 하나였다.

왜쓰는거임..?

아무리 클래스와 클래스 간에 연결을 담당하는 것이 인터페이스라지만 굳이 굳이 굳이 굳이 굳이..........

라는 생각을 하던 찰나 강사님께서 협업할 때 용이하게 사용할 수 있다고 말씀해주셨다. 예를 들면 아래와 같은 상황들일 것이다.

예시

A회사에서 하나의 프로젝트를 시작했다. 행렬계산이 느린 사람들을 위해 각종 행렬관련 연산을 진행하는 프로그램을 만든다고 가정하자.

각 기능별로 한 사람씩 맡아서 분담한다고 가정할 때, A회사에서 제공하는 인터페이스는 아래와 같다고 가정하자.

public interface MatrixMachine {
    void setMatrixFromUserInput();
    void getMatrix();
    ...
}

B씨는 첫 번째 추상 메소드에 대한 구현 클래스를 구성하면 될 것이고, C씨는 두 번째 추상 메소드에 대한 구현 클래스를 구성하면 될 것이다.

이렇게 구현 클래스들이 모두 완성되면, 한 클래스 파일에 각 파일을 합쳐서 완성할 수 있을 것이다.

알고리즘, 자료구조

기존에 알고 있던 얕은 알고리즘 지식 정도 수준의 알고리즘만 진행했다. 간단한 문제 두 문제 정도 풀이하는 것과 간략하게 시간복잡도를 계산하면서 알고리즘을 평가하는 정도만 진행했다.

자료구조에서 했던 부분은 파일처리였다. 이 부분 또한 python에서 자주 다뤘던 터라 쉽게 이해할 수 있었다. 아래 프로그램은 정해진 인원수에 따라 파일에 사람의 정보를 입력하고 그 전체를 출력하거나, 검색하는 기능을 하는 프로그램이다.

package _1006;

import java.io.*;
import java.util.Scanner;

public class ReadPersonInfo {
    public static void main(String[] args) {
        Scanner intScanner = new Scanner(System.in);
        Scanner strScanner = new Scanner(System.in);

        boolean flag = true;

        while(flag){
            System.out.println("--------------실행화면--------------");
            System.out.print("1. 입력\n2. 전체출력\n3. 검색\n4. 종료\n\n실행할 메뉴의 번호를 입력하세요 >> ");
            int menu = intScanner.nextInt();
            switch (menu){
                case 1:
                    System.out.print("등록할 사람의 수를 입력하세요 : ");
                    int personCnt = intScanner.nextInt();
                    String info = "";

                    while(personCnt > 0){
                        System.out.println("--------------회원 등록을 시작합니다.--------------");
                        System.out.print("이름을 입력하세요 : ");
                        String name = strScanner.nextLine();

                        System.out.print("전화번호를 -를 포함하여 입력하세요 : ");
                        String phone = strScanner.nextLine();

                        System.out.print("주소를 입력하세요 : ");
                        String address = strScanner.nextLine();

                        info += name + "," + phone + "," + address + "\n";
                        personCnt--;
                    }

                    System.out.println("---------------입력을 완료했습니다.---------------");
                    try{
                        Writer os = new FileWriter("./_1006/person_info.txt", true);

                        os.write(info);
                        os.flush();
                        os.close();
                    }catch (IOException e){
                        e.printStackTrace();
                    }
                    break;

                case 2:
                    try{
                        Reader r = new FileReader("./_1006/person_info.txt");
                        String infoData = "";

                        while(true){
                            int data = r.read();
                            if (data == -1) break;

                            infoData += (char)data;
                        }

                        r.close();
                        infoData = infoData.replace(",", " ");
                        int dataCnt = infoData.split("\n").length;
                        System.out.println("이름" + "\t  " + "전화번호" + "\t\t" + "주소");
                        System.out.print(infoData);
                        System.out.println();
                        System.out.println(dataCnt + "개의 자료를 출력했습니다.");

                    }catch (FileNotFoundException f){
                        f.printStackTrace();
                    }catch (IOException e){
                        e.printStackTrace();
                    }

                    break;

                case 3:
                    System.out.print("조회할 인원의 이름을 입력하세요 : ");
                    String name = strScanner.nextLine();

                    try{
                        Reader r1 = new FileReader("./_1006/person_info.txt");
                        String infoData2 = "";

                        while(true){
                            int data = r1.read();
                            if (data == -1) break;

                            infoData2 += (char)data;
                        }

                        r1.close();
                        String[] _1dArray = infoData2.replace("\n", ",").split(","); // 1차원 배열을 생성하고
                        String[][] _2dArray = new String[_1dArray.length/3][3]; // 각 회차별로 쪼개기 위해 2차원 배열 생성

                        int idx = 0;                                            // 인덱스값을 위한 초기값
                        for (int i = 0; i < _2dArray.length; i++) {             // 행의 길이만큼 순회하고
                            for (int j = 0; j < _2dArray[i].length; j++) {      // 열의 길이만큼 순회하면서
                                _2dArray[i][j] = _1dArray[idx++];               // 각 행의 열에 값을 채워넣되, idx를 지속적으로 증가시킨다.
                            }
                        }

                        String result2 = "";                                      // 결과를 담을 초기값 생성
                        for (int i = 0; i < _2dArray.length; i++) {              // 행의 길이만큼 순회하고
                            for (int j = 0; j < _2dArray[i].length; j++) {       // 열의 길이만큼 순회하면서
                                if (_2dArray[i][0].equals(name)) {   // 각 열의 첫 번째 값이 회차이므로, 그 회차가 사용자가 입력한 값과 같다면
                                    for (int k = 0; k < _2dArray[i].length; k++) // 해당 행의 모든 열을 순회하면서
                                        result2 += (k < _2dArray[i].length - 1) ? _2dArray[i][k] + " " : _2dArray[i][k]; // 초기값에 각 값을 더한다.
                                    break; // 그리고 찾았다면 더이상 반복문을 돌 필요가 없기에 break
                                }
                            }
                        }

                        if (result2.equals(""))
                            System.out.println("❌ 존재하지 않는 회원입니다. ❌");
                        else {
                            System.out.println("----------------------------------");
                            System.out.println(result2);
                            System.out.println("----------------------------------");
                        }
                    }catch (FileNotFoundException f){
                        f.printStackTrace();
                    }catch (IOException e){
                        e.printStackTrace();
                    }
                    break;

                case 4:
                    flag = false;
                    break;
            }
        }
    }
}

마무리

이번주도 짧았다.. 연휴를 푹 쉬고와서 막 크게 한 것이 없는 것 같았는데 다음주부터는 쉬는날 없이 쭉 달리니까 더 열심히 해야겠다 😀

profile
하루가 다르게 성장하기

0개의 댓글