[WIL] 항해 Chapter 02 (2022.06.24~2022.06.30)

YOONG·2022년 7월 3일
0
post-thumbnail

Chapter 2| 알고리즘 기초

알고리즘 스터디

스터디 후기

졸업한 후 취업을 미뤄두고 공부하는 시간을 가지기로 마음을 먹은 후 매일 알고리즘 문제를 1개씩이라도 꾸준히 풀어야겠다는 목표를 잡았지만 마음처럼 되지 않았다. 사실 공부 방법을 몰라서 시작하기 너무 막막했던 것 같다. 문제가 조금만 길어져도 겁이 났고 어려울 것이라 지레짐작한 후 도전을 망설였다. 그래서 항해 2주차를 기회로 알고리즘 공부법을 좀 깨달을 수 있기를 기대하였다.
시작에 앞서 2주차는 걷기반과 달리기반으로 나누어 진행되었는데 나는 자바를 모르는 상태는 아니였기 때문에 달리기반으로 선택하였고 새로운 팀원들과 일주일간 열심히 진행하였다. 달리기반의 경우 일주일동안 총 40문제를 해결해야했다. 처음엔 이게 가능할까 했는데 첫 날 난이도가 중인 문제들을 15문제나 풀었다. 하나씩 풀다보니 자신감도 생겼고 나름 재미도 있었던 것 같다.


객체지향 프로그래밍(OOP; Object-Oriented Programming)

객체지향 프로그래밍이란

로직을 상태와 행위로 이루어진 객체로 만드는 것으로 현실세계를 프로그래밍으로 옮겨와 현실세계의 사물을 객체로 보고, 그 객체로부터 개발하고자 하는 특징과 기능을 뽑아와 프로그래밍 하는 기법

객체지향 프로그래밍 특징

추상화(abstraction)

  • 객체들의 공통적인 특징(기능, 속성)을 도출하는 것
  • 객체지향적 관점에서는 클래스를 정의하는 것을 추상화라 할 수 있음

캡슐화(encapsulation)

  • 객체가 독립적으로 혁할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리하는 것
  • 실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있음
  • 데이터를 보이지 않고 외부와 상호작용을 할 때는 메소드를 이용하여 통신

상속성(inheritance)

  • 이미 작성된 클래스르 받아 새로운 클래스를 생성하는 것으로 하나의 클래스가 가진 특징(함수, 데이터)를 다른 클래스가 그대로 물려받는 것
  • 기존 코드를 재활용하여 사용함으로써 객체지향 방법의 중요한 기능 중 하나

다형성(polymorphism)

  • 다른 방식으로 동작하는 함수를 동일한 이름으로 호출하는 것으로 동일한 명령의 해석을 연결된 객체에 의존하는 것

    오버라이딩(Overriding)

    • 부모클래스의 메소드와 같은 이름을 사용하며 매개변수도 같되 내부 소스를 재정의하는 것

    오버로딩(Overloading)

    • 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출하여 사용하는 것

동적 바인딩(Dynamic Binding)

  • 가상 함수를 호출하는 코드를 컴파일 할 때, 바인딩을 실행 시간에 결정하는 것
  • 함수를 호출하면 동적 바인딩을 통해 파생 클래스에 오버라이딩 된 함수가 실행
  • 프로그래밍의 유연성을 높여주며 파생 클래스에서 재정의한 함수의 호출을 보장(다형성 개념 실행)

객체지향 프로그래밍 장점

  • 소프트웨어의 생산성 향상
  • 실세계에 대한 쉬운 모델링
  • 보안성 향상

객체지향 프로그래밍 단점

  • 느린 실행 속도

JVM(Java Virtual Machine)

JVM이란

자바 코드 또는 애플리케이션을 구동하기 위한 런타임 환경을 제공하는 엔진
운영체제나 CPU 등 시스템 환경에 관계없이 어디서나 자바언어를 실행할 수 있게 해주는 역할을 하는 것으로 자바만의 독특한 기능


02주차 회고

배운 점

이전에는 문제가 조금만 길어지고 복잡하다고 느껴지면 지레겁먹고 포기하는 경향이 있었는데 일주일간 여러 문제를 풀면서 아무리 길고 복잡한 문제도 하나씩 차근차근 해결하다보면 풀린다는 것을 몸소 체험하면서 겁먹지 않고 도전하는 태도를 배운 것 같다.

느낀 점

알고리즘 문제는 푸는데에서 끝내는 것이 아니고 다른 사람들의 코드도 살펴보고 더 좋은 방법은 무엇인지 좀 더 효율적인 방법은 무엇인지 생각해보는 시간에서 더 많은 것을 배울 수 있는 것 같다. 같은 문제라도 사람들마다 해결한 방식도 다르고 사용한 자료구조도 다른 것이 너무 신기하기도 했고 존경스러운 마음까지 들기도 했다. 앞으로도 꾸준하게 계속 공부해야겠다는 생각이 들었다.

아쉬운 점

난이도가 중하, 중, 중상, 상 이렇게 나누어져 있었고 난이도 상 문제를 해결하고 많이 뿌듯했는데 알고보니 level1 문제였다는 것을 확인하고 조금 실망했지만 아직 공부할 것이 많다는 것을 다시 한 번 깨닫게 된 계기가 된 것 같다.


profile
👊천천히, 하지만 꾸준히👊

0개의 댓글