본문 바로가기

공부/TIL

23.10.25

자바 팀플 과제 2일차// 깃 풀 리퀘스트 머지// 객체 지향 프로그래밍 특강

 

자바 티플 과제 2일차에 돌입했다. 어제는 파트별로 설계에 집중했다. 내생각엔 설계에 집중하는 것도 좋은데 서로 파트가 대화를 하면서 어떤 메서드는 어떻게 구현 될 것인지? 어떤 분기점에서는 어떤 메서드가 필요한지? 이 클래스에서는 이 멤버변수가 필요하니 get, set 메서드를 이용해서 접근을 할 수 있도록 해달라는 요구를 해야 한다던지. 이런 게 필요하다고 생각했다. 이런 부분을 고려하면서 설계를하는 방식이 회의 시간이 오래 걸리긴 하겠지만, 좀 더 명확히 설계 방향성을 잡을 수있다고 생각했고, 오늘 내 생각에 필요했던 회의가 이루어졌다. 

전체적인 프로젝트의 흐름을 다같이 훑었다. 사용자 입력에대한 분기들을 나누고, 나뉘어진 분기마다 필요한 메서드들과, 메서드들이 가져야할 매개변수들에 대해 다같이 얘기했다. 전체 흐름을 다같이 얘기하고 나니 뷰파트가 필요한 예약 파트의 메서드들이 명확해졌다. 이 과정에서 수정해야 했던 멤버 필드들도 수정이 됐고 내생각과 프로젝트가 점점 동기화가 되는 느낌이 들었다. 이제 2일차를 지났으니 사실 이제 막 시작했으니 이정도면 빠르다고 할 수도 있겠다. 

사실상 필수 기능 구현은 거의 끝난 느낌이다. 내일부터는 아마 각자팀원들의 선택적으로 구현하고 싶은 파트들을 맡아서 구현하게 될 것 같다. 나는 예약할 때 여러 명이 동시에 접근하는 것을 막기 위해 스레드의 동기화를 사용해서 예약을 하는게 맞지 않을까? 라고 생각해서 꼭 구현을 해보고 싶다. 

역시나 어려웠던 점은 깃이였다. 팀장역할을 맡고 있기에 깃 허브를 내가 관리를 하고 있엇다. 풀리퀘스트 된 코드들을 머지하는데 정말 너무 어지러웠다. 아직 풀리퀘스트가 무엇인지, 머지가 무엇인지를 명확히 알지 못한 상태에서 머지를 하려니 어려웠다. 8시 반 최종 회의를 하면서 오늘의 최종 프로젝트를 dev 브랜치에 머지해서 올렸는데 엉뚱한클래스에서 또 메서드가 누락되어 머지되었다... 정말 깃에 대해 너무 부족해서 팀원들에게 계속 피해를 주는 것 같아 정규 공부가 끝나고 남아서 깃에 대해 다시 공부했다.

 

팀플을 위한 깃 사용법 정리!

우선 우리 팀플은 main 코드를 아직 건드리지 않고 있다. 아직은 각자의 로컬 brench에서 기능 구현이 하고 있으며 완성된 경우 깃허브의 dev브랜치에 에드/커밋을 한 후, 풀 리퀘스트를 한다. 풀리퀘스트 된 코드를 컨플릭트를 보면서 겹친 코드들중 사용할 코드를 제외한코드들을 지운다. 이후 코멘트를 남기고 머지!

풀리퀘스트가 된 후 머지하는 단계에서 컨틀릭트를 보고 컨플릭트가 더이상 뜨지않아 머지했는데, 이상하게 엉뚱한 클래스의 메서드가 사라져서 올려지는 경우가 있었다. 이부분은 아직 이유를 잘 모르겠다. 그렇게 머지가 되어 최신판이 된 프로젝트는 pull을 땡겨서 다시 다운받아서 사용! 개념적으로는 이해가 이제 됐지만,아직 실사용이 쉽지 않다 깃은 정말 너무 복잡하다ㅠ 그래도 계속 부딪히면서 하자. 팀장이 되어서 깃을 많이 만질 수 있어서 오히려 좋다. 내 팀원들은 답답하겠지만 그래도 오늘 나머지 공부해서 좀 알았으니 내일은 잘 할 수 있겠지!

 

객체 지향 프로그래밍 특강도 들었다.

객체지향 프로그래밍을 하는 이유는! 코딩은 협업이기에 내가 한 코드가 아니여도 수정이 가능할 정도로 알아보기 쉽게 작성되어야 한다. 알아보기 쉽게 된 코드는 재사용성이 높아지고 재사용성이 높아진 코드는 코드재활용으로 코드수가 줄어든다. 반복적으로 재활용된 코드를수정할경우 한번의 수정으로 여러 코드가 수정이 편하다는 이점이 있다. 이러한 이유로 객체지향프로그래밍을 한다고 한다.

그렇담 객체는 무엇일까? 객체는 의미적으로 뭉쳐져있는 하나의 물체..?라고 설명하셨다. 약간 내용이 모호했지만 내가 이해한 바는 이렇다. 어떤 프로그램을 작성할 때 그냥 프로그램의 흐름대로 쭉~~ 작성할 수도 있겠지만, 프로젝트의 흐름에서 핵심적으로 작동하는 몇몇 파트들이 있을 것이다. 예를들어 자동차 프로그램을 작성한다면 엔진파트, 바퀴 파트, 핸들파트들이 있어야 할것이다. 이때의 엔진파트, 바퀴 파트, 핸들파트들을 각각 객체로서 이해할 수 있겠다. 이렇게 각각의 객체들로 구분지어 프로그래밍을 한다면 절차적으로 작성하는 방식보단, 각각 객체들이 어떤 역할을 하는지! 또 각 객체들은 서로 어떤 연관관계를 갖는지(포함 관계, 사용관계 등등)을 파악하여 프로그래밍을 하다보면 코드가 더 이해가 쉽다고 생각한다. 

객체지향 프로그래밍에는 추상화, 캡슐화, 상속, 다형성의 네가지 특징을 갖는다.

추상화는 객체에서 공통된 속성/행위를 추출하는 것. 공통된 속성과 행위를 추출하면 생각할 것이 줄어든다.

캡슐화는 속성과 기능을 정의하는 변수와 메소드를 클래스라는 캡슐에 넣어서 분류하는 것으로 재활용이 원활하다는 장점이 있고 캡슐화를 통해서 정보은닉을 활용 할 수도 있다. (접근제어자의 활용)

상속은 클래스의 속성과 메서드를 물려주기에 공통된 코드들을 많이 줄여줄 수 있다.  부모 클래스를 변경하면 자식 클래스도 같이 변경되기에 변경되기에 상속이 많이된 클래스는 변경이 어려워지는 단점도 가지고 있다. 

다형성은 하나의 변수명/함수명을 다른 용도로 사용 할 수 있게 된다. 이를 가능하게 해주는 것이 오버로딩/오버라이딩!

오버로딩은 매개변수를 다르게 받아 함수의 쓰임을 다르게 하는 것.

오버라이딩은 상속받은 함수를 자신의 클래스에 맞게 자식 클래스에서 함수를 재정의 하는 것!

 

오늘의 알고리즘은 백준 1475번이었다. 

'공부 > TIL' 카테고리의 다른 글

호텔 예약 프로그램  (1) 2023.10.26
23.10.26  (1) 2023.10.26
23.10.24  (1) 2023.10.24
23.10.23  (1) 2023.10.23
23.10.20  (0) 2023.10.20