Beyond SW 7기 4주차 회고록
2024. 6. 9.

🍀 좋았던 점

DB 팀플 끝

이번 주 월요일은 DB 팀플 결과물을 발표하는 시간이었습니다.

다른 팀의 DB 설계를 살펴보면서 "이런 설계가 더 좋네? 앞으로는 이렇게 해야지"라는 생각도 들었고, 발표를 들으면서 진짜 발표를 잘하시는 분들이 많다고 느꼈습니다.

개인적으로 느낀 것은 모든 기능을 다 나열해서 보여주는 것보다, 확실하게 보여주고 싶은 포인트를 정해서 그 기능을 중점적으로 보여주는 게 발표를 듣는 사람 입장에서 더 이해하기 쉽고 흥미가 생겼던 것 같습니다.

다음에 혹시 발표를 하게 되거나 같은 팀원분의 발표를 피드백 해줄 수 있는 기회가 있다면, 이 프로젝트를 전혀 모르는 사람에게 설명한다는 것을 꼭 기억하면서 발표를 준비하거나 피드백 해줘야겠다는 생각을 했습니다.

시험을 잘 봄

어쩌다 시험을 잘봐서 상품으로 커피 쿠폰을 받았습니다,,, 🙇🏻‍♂️

강사님께서도 스벅 쿠폰에 짧은 카드까지 써주셔서 너무 감사했습니다.. 🥹

지금까지는 한번 공부했던 내용들이 대부분이서 복습하는 시간이 많이 필요하지 않았는데, 뒤로 갈수록 처음 공부하는 내용들이 나오니까 초심 잃지말고 열심히 복습해야겠다고 생각했습니다.


😢 부족한 점

도파민 중독 😵‍💫

이번 주에 폰을 왜케 많이 봤는지,,,

디프만 활동이 본격적으로 시작돼서 평일 저녁에 꽤 긴 시간 회의를 하다보니 몸이 적응하기가 힘들었는지, 이번 주에 훅 피곤하다고 느낀 때가 있었습니다.

왜인지 피곤하면 자꾸 유투브, 인스타 같은 도파민을 주체할 수 없이 자꾸 찾게 된다고 느낍니다.

(도파민네이션에선 고통이 크면 고통-쾌락의 저울을 맞추기 위해 도파민을 찾게 된다고 하는데, 피곤해서 고통스러워서 그런 걸까요)

바빠짐 -> 시간을 아껴 써야 한다는 심리적 부담감 -> 쉬면 죄책감(?) 들어서 못 쉼 -> 피곤해짐 -> 피곤해서 효율도 떨어지고 자꾸 유투브 보게 됨 -> 결과적으로 시간 낭비

이번 주는 이런 악순환을 밟게된 것 같아 좀 아쉽습니다.


📖 배운 점

이번주는 자바의 기초적인 문법에 대해 배웠는데, String과 관련한 다양한 메소드에 대해서 배우는 시간이 유익했던 것 같습니다.

StringBuffer와 StringBuilder

둘 중 누가 thread-safe이고, 누가 thread-unsafe이었지 헷갈렸는데, 수업을 들으면서 StringBuffer가 thread-safe, StringBuilder가 thread-unsafe이라는 것을 알게 되었습니다.

그리고 알고리즘 문제 풀때 StringBuilder를 쓰면 append() 메소드 정도만 활용했었는데, insert(), delete() 메소드의 존재도 알게 되었습니다.

  • insert 메소드: StringBuilder의 인덱스(첫번째 인자)번째에 문자열(두번째 인자) 끼워넣기
sb.insert(인덱스, 문자열); sb.insert(5, "python");
  • delete 메소드: 첫번째 인자 ~ (두번째 인자 - 1) 만큼 문자열 삭제
sb.delete(인덱스1, 인덱스2); sb.delete(17, sb1.length());

strip() 메소드

trim() 메소드는 있다는 것을 알고 있었는데, 문자열 양옆의 공백을 제거하는 메소드 중 strip() 메소드가 있다는 것도 알게 되었습니다.

join() 메소드

String 배열을 한번에 concat해서 하나의 String으로 만드는 메소드가 있다는 것을 알게 되었습니다.

    String[] sArr = {"java", "python", "C++", "javascript"};
    st = String.join(" ", sArr); // 결과: "java python C++ javascript"

문자열의 대소문자 (문자열1.equalsIgnoreCase(문자열2), 문자열.toUpperCase(), 문자열.toLowerCase())

알고리즘 문제 풀 때 가끔 "대소문자를 무시하고 비교하라"는 조건이 나올 때가 있는데, 그 때마다 메소드 이름이 기억이 안나서 찾아봤습니다.
그런데 이제 수업 들으면서 equalsIgnoreCase(), toUpperCase(), toLowerCase()에 대해 배웠으니까, 꼭 기억해서 레퍼런스 보지 않고 문제를 풀어야겠다고 생각했습니다.

안까먹을 수 있을까...

정규식과 matches(), Patterens.matches() 메소드

많이 쓰이는 정규식에 대해 배울 수 있었습니다.
물론 복잡한 정규식은 나중에 gpt한테 물어보겠지만, 간단한 정규식을 어느정도 읽을 줄 알고 이해할 수 있어야한다고 생각해서 유익했던 것 같습니다.

    //== matches와 Pattern.matches() ==//
    String test = "helloA";
    System.out.println(test.matches("[A-Za-z]+")); // 영문자로만 이뤄져있는지. true
    boolean b1 = Pattern.matches("[0-9]+", "12345hello"); // 숫자로만 이뤄져 있는지. false
    System.out.println(b1);

    // 전화번호 포맷 검증
    boolean b2 = Pattern.matches("^\\d{3}-\\d{4}-\\d{4}$", number);

    // 이메일 포맷 검증
    boolean b3 = Pattern.matches("^[a-z0-9]+@[a-z]+.com$", email);

기본 자료형 역순 정렬하기 with stream

참조 자료형은 Comparator 객체를 이용하거나 Comparable을 구현하면 원하는 기준으로 정렬하는게 비교적 쉬운데, 기본자료형은 좀 어렵다고 느꼈습니다. (ex. 역순 정렬)
그런데 수업시간에 stream으로 역순 정렬하는 방법을 배워서 좋았습니다. (Integer로 변환 후 정렬하고 다시 int로 변환)

저는 사실 아직 stream을 쓰는데 익숙치 않은데 빨리 익숙해져야겠습니다.

    // 방법 2. stream api와 lambda를 활용한 내림차순 정렬
    int[] answer = Arrays.stream(intArr) // intArr을 대상으로 stream 객체 생성. stream이라는 것은 int 배열의 복사본이라고 보면 된다.
        .boxed() // int 요소를 Integer로 형변환 시키는 메소드
        .sorted(Comparator.reverseOrder())
        .mapToInt(a -> a) // Integer를 다시 int로 형변환
        .toArray(); // 배열로 변환

문자열 꿀팁(?)

  • 중간에 공백 여러게 있을 때, 잘라서 String 배열로 만들기 -> 공백을 나타내는 이스케이프시퀀스 \s 뒤에 + 붙여주면 해결!("\s+")

      String b = "a b c  d";
      String[] bArr = b.split("\\s+");

🌱 개선할 점

피곤하지 않게 잠 많이 자기!

뭔갈 더 많이 하고 싶어서 늦게 자면 결과적으로 능률이 떨어져서 더 안좋은 것 같습니다.
잠자는 시간을 더 앞당겨야겠다고 생각했습니다.
오늘은 10시 반에 자는 것에 도전해보겠습니다..!

1일 1 알고리즘 하기!

요즘은 수업시간 틈틈이 풀어서 1일 1문제를 할 수 있었는데 앞으로는 점점 풀시간이 없어질 것 같습니다.
아무리 바빠져도 포기하지 않고 하루에 한문제는 해결해야겠다고 생각했습니다.

'기록 > Beyond SW' 카테고리의 다른 글

Beyond SW 7기 6주차 회고록  (2) 2024.06.24
Beyond SW 7기 5주차 회고록  (4) 2024.06.18
Beyond SW 7기 3주차 회고록  (7) 2024.06.02
Beyond SW 7기 2주차 회고록  (8) 2024.05.26
Beyond SW 7기 1주차 회고록  (4) 2024.05.19
myoskin