IT/Java

Java 입문 수업 (생활코딩) 완주 후기

yeTi 2022. 1. 20. 12:18

안녕하세요. yeTi입니다.
오늘은 Java 입문 수업 (생활코딩) 을 완주한 후기를 기록하려고 합니다.

강의 수강 계기

9년넘게 자바라는 언어를 다루며 개발자라는 직업을 가져오고 있는데요.

그럼에도 자바를 잘하는가? 자바에 대해서 많이 아는가? 라는 질문에 감히 그렇다라는 대답을 할 수 없었습니다.

그래서 기회가 되면 기초 수업이라도 지속적으로 들으며 놓치고 있는 부분이 있진 않는지 점검을 하려고 합니다.

이번 생활코딩의 자바 입문 수업도 기초적인것을 놓치고 있는것이 있진 않는지 확인차 강의를 듣게 됐습니다.

배운점

객체 지향 프로그래밍

객체 지행 프로그래밍은 절차 지향 프로그래밍의 믄제를 해결하기 위해 나온 개념중 하나이다.

절차 지향 프로그래밍의 규모가 커질수록 유지보수하기가 힘들어졌고, 이를 해결하는 방안 중 하나로 비슷한 성격의 변수나 함수를 하나의 영역으로 묶는 방식을 선택했다.

그랬더니 묶은 단위가 의미있는 개념으로 표현할 수가 있었고 이를 문법화하여 발달한것이 객체 지향 프로그래밍이 된것이다.

따라서 객체 지향 프로그래밍은 특정 목적에 부합하는 변수나 함수를 모아두고 다른 객체에 적절한 기능을 제공하는 것이라고 할 수 있다.

이러한 객체 지향 프러그래밍의 궁극적 목표는 큰 단위위 기능을 작은 단위의 부품들의 조합으로 만드는 것이다.

이를 가능하게하는 개념이 캡슐화인터페이스이다.

캡슐화는 불필요한 정보는 감추고 사용자에게 유의미한 정보만 노출시키는 개념이고, 이를 표현하는 방식이 바로 인터페이스다.

하지만 세상에 절대적인 이치는 없다.
과유불급이라는 말이 있듯이 이렇게 좋은 의도로 만들어진 객체 지향 프로그래밍도 모든 상황에 좋은것은 아니라는 의미이다.

따라서 프로그래머는 적절함이라는 경계를 가지고 때로는 절차적인 프로그래밍도 허용하며 우리가 목표로하는 지향점에 가장 효율적으로 접근할 수 있는 방법은 선택하는것이 중요하다.

상속

객체 지향 프로그래밍의 중요한 개념 중 하나는 상속 이다.

상속이란, 코드의 재활용성을 높이기 위해 제공된다고 배웠다.

여기서 필자는 재활용이라는 단어에 의해서 단순히 상속의 목적이 공통적인 코드를 부모 클래스로 묶기 의해 사용하는 것으로 이해를 해왔고,

그렇게 사용하다보니 자주 겪었던 문제가 공통이라고 생각해왔던 것들이 아니게 되는 상황이 많아 부모-자식관계를 고친 경우가 많이 있었다.

하지만!!
이번 강의에서 개념을 다시 정립하게 되었다.

상속이 풀고싶었던 문제는 바로 기존 코드를 유지하면서 새로운 기능을 더하고 싶은 것이다.

예를 들어, 특정 라이브러리에서 제공하는 클래스를 확장하고 싶다거나, 이미 배포한 클래스가 있는데 특정 기능을 추가하고 싶을때 사용할 수 있는것이 바로 상속인 것이다.

defualt

동일 패키지내 클래스들간에 허용하는 접근 제어자

abstract class (template pattern)

추상 클래스를 사용하는 이유는 부모클래스에는 동작의 단계만 정의해놓고 실제 구현은 자식 클래스에 위임하기 위해서 사용한다.

실 예를 들면, 결제라는 행위는 사용자 신용 확인 -> 결제 -> 후처리 라는 기본 흐름을 가진하 하지만 각 행위는 결제 수단(신용카드, 휴대폰 결제, ... )에 따라 다를 수 있다.

이 때 추상 클래스를 활용하여 부모 클래스에는 인터페이스와 결제라는 행위의 흐름만 정의를 하고 실제 데이터를 조회하거나 처리는 각 자식 클래스에서 처리하도록 설계할 수 있다.

Exception

Effective Java p338 에 기억할만한 주요 Exception 의 목록을 확인할 수 있다.

예외 클래스에는 주요한 특징이 하나있다. 바로 checkedunchecked 라는 것이다.

checked 예외는 반드시 try-catchthrows 를 활용해서 예외를 처리해야하지만 unchecked 는 그럴 필요가 없다.

따라서 개발자는 예외의 특성에 맞게 checked 나 unchecked 는 구분하여 처리할 수 있도록 제공해야한다.

checkedunchecked나누는 기준은 부모 클래스에 RuntimeException 인데, RuntimeException 이 있으면 unchecked 이고 없으면 checked 이다

제네릭

Object 사용의 문제는 Type safe 하지 않고(의도하지 않은 타입을 허용한다) 컴파일 시점에 오류를 알 수 없다는 것이다.

이를 해결하기 위해 도입된 개념이 제네릭이다.

Compareable

Comparable 인터페이스를 implements 하여 compareTo() 를 구현하면 Collections.sort(some collection) 를 사용하여 컬렉션을 정렬할 수 있다.

느낀점

생활코딩의 강의를 본건 이번이 처음인데요.

생활코딩을 운영하고 계신 이고잉님이 프로그래머 영역뿐만 아니라 인문학적인 지식을 많이 알고 계시다고 들었는데,
그래서 그런지 쉽게 와닿는 비유도 많아서 재미있었고, 초심자분들이 느끼기에 어렵다고 생각되는 부분들도 적절히 가이드를 해주셔서 처음 입문하시는 분들이 듣기에 좋겠다는 생각을 했습니다.

특히 일반 유투버 분들과 다르게 강의자료도 볼 수 있어서 굉장히 퀄리티 좋은 강의라고 생각되네요.
자바를 배우고자 하시는 분들께 강추합니다~!!