[WIL] 220718-220724

Ariul·2022년 7월 24일
0

🔍Weekly I Learned

목록 보기
2/7

프로그래밍 기초

2주 차에는 프로그래머스 알고리즘 문제들을 풀고, 개인 과제를 진행하면서 Java를 학습했다.

캠프 합류 전 코딩테스트 언어는 파이썬이 좋다~! 라는 말을 들었고,
나는 아~ 코딩테스트 준비는 파이썬이 좋구나~! 하면서 파이썬 문법 강의만 들었었다.
한마디로, Java랑 알고리즘 문제 풀이에 대해 아는 게 하나도 없었다! (얼씨구 자랑이다!🙄)

그래서일까 막연한 두려움이 있었는데, 막상 해보니 나도 할 수 있네~! 라는 자신감이 생긴 한 주였다.

1. 알고리즘 문제 풀이

Java 기초 문법 강의만 보고 바로 알고리즘 문제를 풀 수 있었던 건, 캠프에서 알려준 알고리즘 문제 풀이 순서를 따랐기 때문이라고 생각한다.

나에게 꼭 맞는 템플릿이라 박제할 겸 정리하자면,

  1. 문제 분석 문제 정확히 이해하기 분석한 내용 정리하기
  2. 규칙 찾기
  3. 코딩화 분석한 내용을 바탕으로 알맞은 구현 방법 찾기
  4. 실제 코딩 수행
    ⇒ 통과하지 못하면 문제가 있는 순서(1~3번 中)로 돌아가서 다시 진행!

키보드에 손을 올리기 전에, 먼저 노트에 적으면서 문제를 분석하고 규칙을 찾았다.
그리고 여기에 더해서, 항상 이 생각을 하려고 노력했다.

쉽게 쉽게 생각하자!
일단 구현하자!


2. 객체지향 개인과제

요구 조건에 맞게 상위 클래스와 하위 클래스를 설계하고,
추가로 추상 클래스 및 인터페이스를 이용해 확장에 용이한 형태로 변경해 보는 과제였다.

먼저 요구 조건을 보고 공통 기능과 공통 요소를 정리했고, 이에 따라 상위 클래스 Trans와 하위 클래스 Bus, Taxi를 만들었다.

결과물은 이렇게 시나리오에 맞게 요소들이 정상 출력되면 된다!

개인과제

과제를 완성(?)하고 제출하기는 했는데,
내가 지금 프로그래밍을 하고 있는지~ 글을 쓰고 있는지~ 헷갈릴 정도로 거의 프린트문으로 해결했다. 과제하는 내내 쓰읍.. 이게 맞나..? 이런 의구심을 가지고 있었는데, 이런 생각이 들 땐 보통 그게 아닌거..ㅎㅎ
그리고 기능 반복이 많다는 문제도 있었다. 문제가 있는 건 아는데! 어디서부터 어떻게 해결해야 할지를 몰라! 그래서 그냥 제출했다.

시간이 지나 다시 이 코드를 봤을 때 뭐야 코드 상태 왜 이래ㅋㅋㅋㅋ 이건 이렇게~ 저건 저렇게 해야지!하면서 고칠 수 있도록 빨리 실력을 키워야겠다.


3. 배우고 느낀점, 발전시켜야 할 점

💡객체지향 프로그래밍이란?

  • OOP: Object Oriented Programming
  • 객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것.
  • 객체는 속성(필드, 정적 속성)과 동작(메서드, 동적 속성)으로 구성.
  • 객체 지향 프로그래밍의 특징
    1) 캡슐화 2) 상속 3) 다형성 4)추상화
<캡슐화>
- 객체의 필드, 메서드를 하나로 묶고, 실제 구현 내용을 감춘다.
- 접근 제한자(Access Modifier)를 사용하여 객체의 필드와 메서드의 사용 범위를 제한함으로써 외부로부터 보호한다.
<상속>
- 상위 객체를 재사용해서 하위 객체를 쉽고 빠르게 설계할 수 있도록 하며, 반복된 코드의 중복을 줄여준다.
- 상위 객체의 수정으로 모든 하위 객체들의 수정 효과를 가져오므로 유지 보수 시간을 최소화시켜준다.
<다형성>
- 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다.
- 부모 타입에는 모든 자식 객체가 대입될 수 있고, 인터페이스 타입에는 모든 구현 객체가 대입될 수 있다.
- 다형성의 효과로 객체의 부품화가 가능하다.
<추상화>
- 구체적인 사물들의 공통적인 속성과 기능을 파악해서 이를 하나의 개념(집합)으로 다룬다.
- 각 개체의 구체적인 개념에 의존하지 말고 추상적 개념에 의존해야 설계를 유연하게 변경할 수 있다.

💡JVM이란?

  • Java Virtual Machine(자바 가상 머신)의 줄임말
  • 운영체제와 자바 프로그램을 중계하는 JVM을 통해 자바 프로그램이 여러 운영체제에서 동일한 실행 결과를 내도록 한다.
  • 자바 바이트코드는 타겟 플랫폼에 상관없이 모든 JVM 위에서 동작한다.
  • 하지만, JVM은 타겟 플랫폼에 의존적이다.

기본기 기본기 기본기 기본기 기본기!!!!!!

알고리즘은 기초 문법 강의만 보고도 바로 문제 풀이에 돌입할 수 있었다.
분석한 내용을 바탕으로 이건 이렇게 풀면 좋겠는데, 어떤 방법을 써야 하지? 하면서 방법을 검색할 수 있으니까!

그런데 객체지향 프로그래밍 과제를 할 때는 기본기의 중요성을 절실하게 느꼈다.

강의를 들을 때는 아~~ 객체지향이 이런 거구나~ 오키오키 이해 완료!

과제로 돌아와서는 아~~.. 아...? ㅇ ㅏ……? 객체지향.. 그게 뭔데.. 그거 어떻게 하는 건데.....

강의 보고 과제 하고. 다시 강의 보고 찾아보고.. 무한 루프...🤦‍♀️

이런 문제를 해결하려면......

기본기를 제대로 다져야 한다. 진득하게 기본서를 떼보자. 강의를 들었다고 내 머릿속에 남는 게 아니다.

또한 머릿속에 있는 정보들을 잘 정돈된 말로 설명할 수 있는 정도가 되어야 한다.

과제를 하면서 다른 팀원분들께 많은 도움을 받았는데, 
`이건 이렇고 저건 저래서 요건 요런 겁니다~` 라고 잘 정돈된 말로 설명해 주시는 모습을 보고 
`아! 저렇게 해야 공부했다고 말할 수 있구나!` 라는 생각이 들었다.

머릿속으로 지식을 쌓고, 그걸 적기에 꺼내서 잘 설명할 수 있을 정도가 되어야 한다.
알았나 나 자신. 유 갓잇?

사소한 관심이 큰 힘이 되는 세상..✨

생뚱맞은 느낀 점이지만, 느낀 점은 느낀 점이니까🤭
이번 주에 사소한 관심도 누군가에겐 큰 힘이 될 수 있다는 것을 깨달았다.

과제를 하던 중 누가 게더에서 나를 불렀는데, 1주 차 프로젝트를 함께 했던 팀원분이셨다.
알고 보니 9시가 넘어 다른 팀원들은 게더를 떠났고, 내가 혼자 공부하는 모습을 보고 마음을 써주신 거였다. 이런저런 이야기를 나누고, 도움 되는 정보를 공유하고, 서로 북돋아준 덕분에 열심히 공부하자! 라는 의지를 또 한 번 다질 수 있었다.

그리고, 중학교 은사님께서 갑작스레 연락을 주셨다. 매년 스승의 날에 연락을 드렸지만 올해는 바쁘다는 핑계로 못 드려서 죄송한 마음이 가득했는데, 먼저 잘 지내고 있냐는 가벼운 말로 연락을 주셔서 감사했다. 잊지 않고 찾아주신 따뜻한 마음 덕분에 또 힘이 났다. 복덩이구나 나😁


3주차 예고(ft. Spring)

지난주에 알고리즘 문제 몇 개 풀었다고 나란 녀석 멋진 걸 어쩌고 하던 사람.. 지금 어디 갔을까..?

스프링은 굉장히 강한 녀석이다. 자바도 쉽지 않았지만 스프링은 더 하다.
그래도 좀 위안이 되는 건 처음 읽을 때 이해 안 되던 문서가 두 번 읽고 세 번 읽으면 호오~ 이런 말이었군! 이렇게 된다.
마찬가지로, 처음 볼 때 뭔소리야앙ㄱ! 했던 강의가 두 번 보고 세 번 보니 아항~ 그렇구나~! 로 변하고 있다..!
여전히 미로 속에 있지만, 그래도 점점 길을 찾는 느낌이다.

그리고 다시 외치자 DON'T WORRY. It's not rocket science🚀

이때까지는 인텔리제이가 빨간 글씨를 뱉어낼 때마다 왜!!! 왜 안 되는데!?!???를 외치다가도
금세 워워 take it easy girl~ 을 외치며 오류를 잡아냈는데 코딩하다 보니 혼잣말 많아짐
스프링은 너무 강력해서 듣도 보도 못한 오류가 생기고, 오류 해결법을 따라 해도 안 풀려서 그걸 잡아내는 게 진짜 힘들다 (엉엉엉)
하지만 다시 마음을 가다듬고 기억하자. 이건 정말 별거 아니고. 나는 결국 해낼 거다.

Don't worry.
It's NOT rocket science.
You'll finally MAEK IT 😊👍

profile
정성과 진심을 담아 흔적을 기록하자💡

0개의 댓글