'5월 14일' 스물한 번째 기록 [TIL]

가은·2024년 5월 14일
0

I Learned [본 캠프]

목록 보기
32/135
post-thumbnail

👩‍🏫 오늘의 출석

❓스물한 번째, 9 to 9을 해 본 소감❓

오늘의 목표는 2주 차 강의를 다 듣는 것이었는데, 지키지 못했다. 디버그하니까 한글이 깨지는 문제가 발생했고 구글링을 해서 하란 대로 했는데도 문제가 해결되지 않았다. 튜터님을 찾아가서 여쭤보았는데도 여전히 해결되지 않은 상태이다. 그래도 오늘은 9시 이후에 갑자기 여러 사람과 이야기를 나누며 시간을 보내서 즐겁게 마무리할 수 있었다. 개인 과제도 시도해 보려고 했는데 막상 시작하려고 하니까 어떻게 해야 할지 막막함에 제대로 된 시도도 못 해보고 다시 강의로 돌아왔다. 빨리 강의 다 듣고 과제하고 싶다.

📑오늘 학습한 내용

🧩오늘의 알고리즘 : 콜라츠 추측 🧩

문제 : 937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.

1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.

예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.

제한 사항

  • 입력된 수, num은 1 이상 8,000,000 미만인 정수입니다.
class Solution {
    public int solution(long num) {
        int answer = 0;
        
        while(num != 1) {
            if(num % 2 == 0)
                num /= 2;
            else
                num = num * 3 + 1;
            answer++;
            
            if(answer >= 500) {
                answer = -1;
                break;
            }
        }
        
        return answer;
    }
}

🧩 오늘의 SQL : 중성화 여부 파악하기 🧩

문제 : 보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.

SELECT ANIMAL_ID, NAME, IF(SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%', 'O', 'X') AS '중성화' 
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

IF문에 대해서 알게 되었다.
또한 case where문을 사용하여 작성할 수도 있다는 것을 알게 되었다. 이 때는 조건을 기반으로 값을 반환하는 형식으로 작성할 수 있다.

🌱 Spring 입문 주차 강의

  1. 역할 분리
  • 어제 작성한 Memo코드는 역할 분리 없이 한 클래스가 너무 많은 역할을 하고 있어서 이를 기능 즉 역할 별로 나누어주도록 코드를 수정하였다.
  • MemoController, MemoService, MemoRepository 이렇게 3개의 패키지와 클래스로 나누었다.
  1. 객체 중복 생성 문제 해결하기
  • 위의 역할별로 분리하고 나면 클래스별로 중복되는 코드가 생기게 되는데, 코드를 작성할 때 이런 식으로 중복된 코드를 좋지 않게 생각하기 때문에 중복되는 코드를 하나의 생성자와 필드로 만들어 사용하도록 수정하였다.
  1. 강한 결합느슨한 결합으로
  • 지금까지는 위의 MemoController, MemoService, MemoRepository 이 세 클래스가 MemoController → MemoService → MemoRepository 순으로 흘러가게 코드가 작성되어 있었다. 이를 강한 결합이라고 하는데, 강한 결합의 문제는 특정 한 부분의 코드를 수정하기 위해서 연결된 다른 여러 코드들 까지 수정해야 한다는 문제점이 있다. 그렇기 때문에 강한 결합이 아닌 느슨한 결합이 되도록 위의 코드를 수정해 주었다. 느슨한 코드로 수정을 마치고 나면 처음처럼 MemoController → MemoService → MemoRepository 순으로 흘러가는 것이 아니라 MemoRepository → MemoService → MemoController 순으로 제어의 흐름이 바뀌게 되고 이를 제어의 역전이라고 한다.
  1. IoC Container와 Bean
    • 빈(Bean) : Spring이 관리하는 객체
    • Spring IoC 컨테이너 : 'Bean'을 모아둔 컨테이너
    • Spring Bean을 등록하는 방법은 @Component를 Bean으로 등록하려고 하는 클래스 위에 작성한다. Bean의 이름은 클래스의 앞 글자만 소문자로 변경하여 저장한다. 이때 제대로 Bean이 되었다면 커피콩 모양의 Bean 아이콘이 생성된다.

0개의 댓글