'5월 4일' 푸른 달 첫째 주 토요일의 기록 [TIL]

가은·2024년 5월 4일
0

I Learned [본 캠프]

목록 보기
20/135
post-thumbnail

📑오늘 학습한 내용

🧩오늘의 알고리즘 : 자릿수 더하기🧩

 public  int solution(int n) {
        int sum = 0;
        
      int[] answer = new int[(int) Math.log10(n) + 1];

        for (int i = 0; i < answer.length; i++) {
            answer[i] = (n % 10);
            n = n / 10;
            
            sum = sum + answer[i];
        }
        return sum;
    }

🔎 오늘의 (자릿수 더하기) 코드 분석하기

int[] answer = new int[(int) Math.log10(n) + 1];

  • new int[(int) Math.log10(n) + 1]: 특정 크기로 배열을 초기화
  • Math.log10(n): 이 부분은 변수 n의 밑이 10인 로그를 계산하고 double로 나오는 결과 값을 int로 변환함.
  • +1을 하는 이유: 로그의 소수 부분을 자른 후 배열에 결과를 담을 수 있는 충부한 공간이 있는지 확인하기 위해
  • 코드는 숫자 'n'의 숫자를 담을 수 있는 충분한 공간(안전을 위해 추가 공간 1개 포함)을 사용하여 '응답'이라는 정수 배열을 초기화함

answer[i] = (n % 10);

  • n % 10: n을 10으로 나눈 나머지를 계산, n의 가장 오른쪽 자리 추출함.
  • 답변[i]: 추출된 숫자(n % 10에서 얻음)를 답변 배열의 i번째 요소에 할당하기 때문에 배열의 i번째 위치에 n의 가장 오른쪽 숫자를 저장

n = n / 10;

  • n / 10: n을 10으로 정수 나누기를 수행하여 n에서 가장 오른쪽 숫자 제거
  • n: 나누기 결과를 다시 n에 할당하여 사실상 n을 나누기 몫으로 업데이트하여 가장 오른쪽 숫자를 제거
  • 이 줄이 실행된 후 'n'에는 가장 오른쪽 숫자를 제거한 후 원래 숫자 'n'의 나머지 숫자가 포함

🧩 오늘의 SQL : 아픈 동물 찾기 🧩

문제 : 동물 보호소에 들어온 동물 중 아픈 동물1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION like 'Sick'
ORDER BY ANIMAL_ID ASC

💻자바의 정석 내용정리

상속

  • 기존의 클래스로 새로운 클래스를 작성하는 것
    • 코드의 재사용
  • 두 클래스를 부모와 자식으로 관계를 맺어주는 것
  • class 자식클래스 extends 부모 클래스 {}
  • 자손은 조상의 모든 멤버를 상속 받음(생성자, 초기화 블럭 제외)
  • 자손의 멤버 개수는 조상보다 적을 수 없음 (같거나 많아야 함)
  • 자손의 변경은 조상에 영향을 미치지 않음

포함 관계

  • 포함이란?
    • 클래스의 멤버로 참조변수를 선언하는 것

제어자

  • 클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여
  • 접근 제어자 : 4개 중에 1개만 사용, 접근 제어자 제일 왼쪽에 적는 경향
    • public, protected, (default), private
  • 그 외 : 하나의 대상에 여러 제어자 같이 사용 가능
    • static, final, abstract, native, transient…

static

대상의미
멤버변수- 모든 인스턴스에 공통적으로 사용되응 클래스 변수
  • 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능
  • 클래스가 메모리에 로드될 때 생성 |
    | 메서드 | - 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드
  • static메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없음 |

final

대상의미
클래스- 변경될 수 없는 클래스, 확장될 수 없는 클래스
- final로 지정된 클래스는 다른 클래스의 조상이 될 수 없음
메서드- 변경될 수 없는 메서드
- final로 지정된 메서드는 오버라이딜을 통해 재정의 될 수 없음
멤버변수, 지역변수- 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 됨

abstract

대상의미
클래스- 클래스 내에 추상 메서드가 선언되어 있음을 의미함
메서드- 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알림

접근 제어자

  • 아래의 4개 중에 1개만 사용
    • 클래스 앞에는 public 또는 (default) 둘 중 하나 사용 가능
    • 멤버변수 앞에는 4개중에 1개 사용
private같은 클래스 내에서만 접근 가능
(default)같은 패키지 내에서만 접근 가능
protected같은 패키지 내에서, + 다른 패키지의 자손 클래스에서 접근 가능
public접근 제한이 전혀 없음

캡슐화와 접근 제어자

  • 접근 제어자를 사용하는 이유
    • 외부로부터 데이터를 보호하기 위해서 ⇒ 캡슐화의 이유
    • 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서

CH7 강의 내용 정리하고 팀 프로젝트 코드를 수정해보았다.

💞 팀 프로젝트

// 전체 회차 성적 조회
    private static void displayScoreView() {
        System.out.print("학생의 ID를 입력하세요: ");
        String studentId = sc.next();

        System.out.print("과목을 입력하세요 (Java, 객체지향, Spring, JPA, MySQL, 디자인 패턴, Spring Security, Redis, MongoDB): ");
        String subjectName = sc.next();

        if (studentList.containsKey(studentId)) {
            Student student = studentList.get(studentId);
            Map<Subject, Map<Integer, Score>> scores = student.getScores();
            boolean foundSubject = false;

            for (Map.Entry<Subject, Map<Integer, Score>> entry : scores.entrySet()) {
                Subject subject = entry.getKey();
                if (subject.getSubjectName().equals(subjectName)) {
                    foundSubject = true;
                    Map<Integer, Score> scoreMap = entry.getValue();
                    System.out.println("[" + subjectName + "] 성적 조회");
                    for (Map.Entry<Integer, Score> scoreEntry : scoreMap.entrySet()) {
                        int round = scoreEntry.getKey();
                        Score score = scoreEntry.getValue();
                        System.out.println("회차: " + round + ", 성적: " + score.getScore());
                    }
                    break;
                }
            }

            if (!foundSubject) {
                System.out.println("해당 과목의 성적이 없습니다.");
            }
        } else {
            System.out.println("학생을 찾을 수 없습니다.");
        }
    }
}

다른 팀원이 만든 코드와 합쳐서 1차 코드를 푸시했을때 수정사항을 말한 부분을 수정했다. 그런데 아직 다른 팀원들의 코드가 완성되서 합쳐진게 아니다 보니 제대로된 테스트가 불가능 했다. 내일 마저 더 수정해야할 것 같다.

0개의 댓글