[회고일지] 항해99 3주차

항해99 3주차는 걷기반 / 달리기반 중 선택하여 지정된 프로그래머스 문제를 푼다. 

 

다음과 같이 반은 어디까지나 본인이 언어 기본주차를 거치면서 공부해보고 판단하여 선택을 할 수 있다. 나의 경우 몇 가지 체크리스트에 체크를 하다보니 최종적으로 달리기반을 해보는 것을 추천받아 달리기반을 선택하여 진행했다. 

 

우선 달리기반의 경우 프로그래머스 LV1 단계를 중심으로 주어진 40문제를 풀며 그 중 간단한 BASIC한 문제와 조금 난이도가 올라간 도전 문제로 이루어져있다.  실제로 문제를 풀어나가면서 LV1문제라도 현재 수준에서 난이도가 있는 문제들이 꽤나 있었다.  물론 문제를 접할 때 지문이 길어지고 단순에 어떻게 풀어나갈지 어려우면 하기 싫어지는 것도 사실이었다.....

 

한 주간 주어진 40문제에 대해서 중간 모의테스트와 본 테스트 2번의 시험이 있기에 조원들과 협의하여 하루에 최소 풀어야할 문제 수를 정했고, 우리 조는 7문제씩을 지정하였다. 초반에는 가볍게 하루에 주어진 문제 수에만 집중해서 풀고 다른 방식으로도 풀어보고 했는데, 하루 이틀 지나면서 무엇인가 시간적으로 효율적이지 못하다는 생각이들어서 그때부터는 빠르게 문제를 풀어나갔던 것 같다. 그 중 어렵다고 느껴지는 문제에 대해서는 디버깅도 해보고 실제 내가 풀어내는 방식에 대해서 흐름도 확인해가면서 진행했던 것 같다. 

 

무엇보다 한 주동안 알고리즘을 반복적으로 백준, 프로그래머스 번갈아가면서 풀다보니 어느정도 문제를 접하고 접근하는데 있어서 경험과 실력이 확실히 쌓이고 있다는 생각을  했던 것 같다.


금주 학습 키워드

1.) 상속 ? 

상속이란 객체지향프로그래밍에서 프로그램을 설계하는 하나의 방법으로 기존에 정의한 클래스들 간에 공통되는 멤버(변수,메서드)를 묶어 하나의 공통되는 멤버를 다룰 상위 클래스에 정의하고 하위 클래스에서 'extends' 키워드를 통해 상위 클래스 멤버들을 상속받을 수 있다. 

이때, 다음과 같은 사항들은 유의해야한다.

      1.) 멤버인 변수와 메서드만 상속될 뿐 초기화블럭, 생성자는 상속되지 않는다.
     2.) JAVA는 단일 상속만 허용한다.

다음으로 상속관계를 공부하다보면 다형성, 오버라이딩이라는 개념이 함께 나오게 된다.

- 오버라이딩 ?
부모 클래스에 정의된 메서드를 자식 클래스에서 재정의하여 자신에 맞도록 동작하게 하는 방식이다.

이때,  메서드의 선언부는 일치시키며, 단순 구현부만 변화된다.

- 다형성 ?
참조변수의 타입을 상속관계의 부모타입으로 지정할 경우 자신 또는 자식타입의 인스턴스를 참조할 수 있다. 이때, 참조변수를 통하여 참조하고 있는 인스턴스의 메서드를 호출할 경우 참조하고 있는 인스턴스에 메서드가 호출된다. 즉, 자식 인스턴스를 참조하고 있을 시 부모클래스에 있는 메서드를 자식 클래스에서 오버라이딩 했을 경우 자식 클래스에 재정의한 내용이 수행된다. 이를 활용하여 호출하는 쪽에서는 동일한 메서드를 호출하더라도 참조변수가 참조하고 있는 인스턴스의 타입에 따라 다양하게 동작하도록 할 수 있다. 이를 잘 활용하면 유지보수 측면에서 도움을 얻을 수 있다.

2.) 인터페이스

객체지향프로그래밍을 하다보면 추상화와 관련하여 추상메서드, 추상클래스라는 내용이 나온다. 추상메서드란 메서드의 선언부를 통하여 선언만 해놓을 뿐 구현부를 구현하지 않는 메서드이다. 하나의 클래스 안에 이와같이 추상메서드를 선언했을 경우 해당 클래스는 추상클래스가 되며, 추상클래스의 경우는 인스턴스 생성을 할 수 없다. 그렇기에 해당 클래스에 추상메서드는 상속을 통하여 하위클래스로부터 상위클래스에 선언한 모든 추상메서드들을 반드시 구현해야한다. 즉, 하위 클래스에서 모두 구현하지 않을 경우  해당 하위클래스도 추상클래스가 된다.

그러나 여기서 한 가지 생각해볼 것은 이와같이 부모 클래스에서 추상메서드를 만들어놓으면 반드시 해당 메서드를 하위 클래스에서 구현해야한다. 이때,  굳이 필요하지 않은 메서드까지 반드시 구현을 해야하는 상황이 발생하며, 구현을 해야한다는 것은 불필요한 메서드를 클래스 안에 두어야하는 것이다. 이때, 다음과같이 인터페이스를 활용하면 더욱 유연한 설계를 할 수 있게 된다. 

인터페이스는 추상메서드, 상수로 구성되어 있으며, 현재는 static 메서드, default 메서드도 사용가능하다. 
이처럼 인터페이스는 추상메서드의 집합체이기에 인스턴스를 생성해서 사용할 수는 없고 해당 추상메서드들을 구현한 구현클래스가 필요하다. 인터페이스는 'implements' 키워드를 통하여 사용할 인터페이스를 지정하고 해당 인터페이스의 추상메서드들을 모두 구현해주면 된다. 

다음으로 인터페이스는 상속과 다르게 다중으로 지정할 수 있다는 장점이 있다. 그렇기에 서로 관련 있는 기능들을 인터페이스에 추상메서드로 정의해놓으면 해당 기능을 사용해야하는 클래스에서 언제든지 인터페이스를 구현하여 사용할 수 있고, 기능별로 나누어두어 필요한 기능들을 추가적으로 다중으로 인터페이스를 지정하여 구현클래스를 설계할 수 있다. 또한 추상클래스를 상속 받을 경우와 다르게 굳이 필요없는 기능들을 클래스 안에 두어야 하는 단점도 보완할 수 있다.

다음으로 인터페이스타입 참조변수로 해당 인터페이스를 구현한 구현클래스 인스턴스를 참조도 할 수 있다.

이때, 여러개의 인터페이스를 구현했을경우 참조형 타입에 따라 사용할 수 있는 메서드들은 참조형 타입을 따라간다.

한 주간을 마치면서 아무래도 지속적으로 앉아서 공부를 하다보니 슬슬 여기저기 삐걱삐걱하기 시작했다. 그러나 한편으로는 언제 이렇게 공부해본 적이 있나 싶으며, 출석체크를 하는데 한 주간 공부한 시간을 보면서 정말 뿌듯한 마음이 든다. 

 

정말 변화하려면 환경설정이 중요하다는 말을 많이 들었는데, 맞는 말이라고 많이 느낀다. 실제로 항해를 하면서 주 단위로 구성원이 바뀌는데 그 부분에 있어서도 생각해보면 누구를 만나는가에 따라 한 주가 달라지기도 했고, 반대로 생각해보면 누군가가 나와 같은 조를 하면서 얼마나 큰 도움이 되었을까?라는 생각을 문득해보게 된다. 그러다보니 이번 한 주간에 서로가 win-win 하는 방향은 무엇이 있는지에 대한 고민을 개인적으로 많이 했던 것 같다.

 

누군가는 상대적으로 능숙할 수 있다면, 반대로 미숙한 인원도 있을 수 있는데 함께라는 키워드 안에서 결국은 서로가 성장해야하는 과정이기에 도움을 주고 받는 부분에 있어서 스스로 그리고 서로 시너지가 될 수 있는 방향을 잘 설정하는 것도 추후에 정말 큰 경험이 될 것 같다고 생각한다.

 

항해 12기에서 늦은시간까지 앉아서 개인과제, 팀 과제, 개별 학습을 하는 많은 인원들이 있는데, 최종적으로 끝까지 완주하고 모두가 큰 성장을 이루어냈으면 하는 개인적인 바람이다~~

 

 

 

'TIL & WIL > WIL' 카테고리의 다른 글

[회고일지] 항해99 실전프로젝트 1주차  (0) 2023.03.22
[회고일지] 항해99 5주차  (2) 2023.02.19
[회고일지] 항해99 2주차  (0) 2023.01.30
[회고일지] 항해99 1주차  (0) 2023.01.22
[회고일지] 항해99 0주차  (2) 2023.01.15