[Java] 상속, 조합
·
Programming/Java
우아한테크코스 레벨 1에서 학습한 내용을 정리한 글입니다. 💭 들어가며코드 리뷰에서 조합을 사용해 보는 것을 권유받았다. 조합..? 조합에 대해서 전혀 몰랐던 나는 관련 아티클을 무작정 찾아보며 도입을 시도하고, 장단점을 직접 분석해보고자 했다. 찾아보니 객체지향 설계 원칙 중에 "상속보다 조합을 우선하라"라는 말을 발견했다. "대놓고 상속보다 조합을 사용하라고 하네?"라는 생각이 들었지만, 왜 조합을 써야 하는지, 어떤 상황에서 조합이 좋은지 정확히 몰랐기 때문에 이를 정리하고, 실제 미션에 적용해 보기로 했다.  ✅ 상속 (Inheritance)상속은 부모 클래스의 속성과 행동을 자식 클래스가 물려받는 방식이다.🔽 장점부모 클래스의 정의된 로직을 자식 클래스가 그대로 사용할 수 있어 코드 재사용성..
[OOP] SOLID
·
Programming/OOP
우아한테크코스 레벨 1에서 학습한 내용을 정리한 글입니다. 💭 들어가며미션을 진행할 때마다 항상 "좋은 설계란 무엇일까?"라는 고민을 하게 된다. 그 물음에 대한 답을 찾기 위해 다양한 시도를 해보지만, 결국은 SOLID 원칙으로 귀결되곤 한다.SOLID 원칙은 객체지향 설계에서 지켜야 할 다섯 가지 핵심 원칙을 말하며, 변화에 유연하고 유지보수가 쉬운 구조를 만드는 데 큰 도움을 준다. 궁극적으로 좋은 설계란 변경 사항이 생겼을 때 영향을 받는 범위가 최소화된 구조라고 생각한다. 이런 구조를 만들기 위해 SOLID 원칙은 좋은 기준점이 되어 준다.SRP (Single Responsibility Principle): 단일 책임 원칙OCP (Open Closed Principle): 개방 폐쇄 원칙LSP..
[Java] 인터페이스, 추상 클래스, 일반 상속
·
Programming/Java
우아한테크코스 레벨 1에서 학습한 내용을 정리한 글입니다. 💭 들어가며미션을 진행하면서 인터페이스와 추상 클래스의 특징을 명확히 이해하지 못한 채, 미션을 완료하기 위해 무작정 사용하곤 했다. 그런데 이번 장기 미션에서 페어였던 포포는 추상 클래스를 깔끔하게 잘 활용하는 반면, 그 차이를 온전히 따라가지 못하는 나를 보며 해당 개념을 다져야겠다고 생각했다. 이를 계기로 인터페이스와 추상 클래스, 그리고 일반 상속의 특징과 차이점 및 사용 시점 등에 대해 정리해 보았다.  ✅ 인터페이스(Interface)interface 키워드로 선언된 구조이다.기능을 정의하는 데 사용한다.메서드 시그니처만을 가진다.자바 8부터 default 메서드(구현 포함)와 static 메서드 선언이 가능해졌다.기본적으로 모든 메..
[Java] 제네릭(Generic)
·
Programming/Java
우아한테크코스 레벨 1에서 학습한 내용을 정리한 글입니다. 💭 들어가며자바의 제네릭은 컬렉션 프레임워크를 사용할 때 자연스럽게 접하게 되지만, 정확한 용도를 깊이 이해하지 못한 채 사용해 왔다는 생각이 들었다. 이번 기회를 통해 학습하면서, 제네릭이 예상보다 복잡한 개념임을 알게 되었다. 따라서, 이번 포스팅에서는 기본적인 내용을 간단히 정리하고, 추가적인 학습이 필요할 경우 심화 내용을 따로 다루고자 한다.  ✅ 제네릭(Generic)이란▶ 정의제네릭(Generic)은 타입을 변수화하여, 클래스나 메서드 선언 시 구체적인 타입을 적지 않고, 사용하는 쪽에서 그 타입을 지정해 줄 수 있도록 하는 기술이다.🔽 예시 코드List genericList = new ArrayList();위 예시에서 List은..
[Java] 컬렉션 프레임워크(Collection Framework)
·
Programming/Java
우아한테크코스 레벨 1 자료를 참고하여 학습한 내용을 정리한 글입니다.틀린 내용이나 그림이 있다면 댓글로 알려주시면 감사하겠습니다. 👐🏻 💭 들어가며미션을 수행할 때 주로 List나 Set 같은 익숙한 컬렉션만 사용해 왔다. 하지만 LinkedList, Deque 등의 자료구조를 접하면서 컬렉션의 동작 방식과 적절한 활용 시점을 정확히 파악하지 못하고 있다는 생각이 들었다. 이러한 문제를 해결하기 위해, Java의 컬렉션 구현체들을 하나씩 분석하며 깊이 있게 공부할 필요가 있다고 느꼈다.Java Collections Framework는 크게 인터페이스(Interface)와 구현체(Implementations)로 구성되어 있으며, 각 구현체는 특정한 상황에서 더 효율적인 성능을 제공한다. 이를 이해하..
[Java] 람다 표현식, 함수형 인터페이스, Stream API
·
Programming/Java
우아한테크코스 레벨 1 자료를 참고하여 학습한 내용을 정리한 글입니다. 💭 들어가며일반 for 문과 향상된 for 문에 익숙해져 있어 Lambda와 Stream API를 사용하지 않았다. 우아한테크코스 미션에서 Lambda와 Stream API를 활용하는 데 미숙한 나를 보며 계기로 학습의 필요성을 느꼈지만, 왜 for 문 대신 Stream API를 사용해야 하는지 잘 와닿지 않았다. 기존의 for 문도 충분히 가독성이 있다고 생각했기 때문이다. 따라서 이번 글에서는 람다 표현식(Lambda Expression), 함수형 인터페이스와 Stream API를 왜 사용하는지, 그리고 어떻게 활용하는지를 정리했다.  ✅ 람다 표현식(Lambda Expression)▶ 사용하는 이유Java 8 이전에는 익명 클..
[Java] 테스트 코드, JUnit & AssertJ
·
Programming/Java
우아한테크코스 레벨 1 자료를 참고하여 학습한 내용을 정리한 글입니다. 💭 들어가며테스트 코드를 작성하는 것은 개발자에게 매우 중요한 일이다. 경험이 쌓이고 연차가 늘어날수록 코드의 안정성을 더욱 중요하게 고려해야 한다. 테스트 코드를 작성할 때 일반적으로 org.junit.jupiter.api.Assertions(JUnit) 또는 org.assertj.core.api.Assertions(AssertJ)를 사용하며, 대부분 후자인 AssertJ를 선호하는 경우가 많다. 그 이유는 아래에 살펴보자.  ✅ Test AnnotationAnnotation설명@Test단위 테스트를 정의@DisplayName테스트 이름을 지정@Nested내부 클래스를 이용한 그룹화 테스트@Disabled테스트를 비활성화@Para..
[회고] 2024년 하반기 - 파란만장한 첫걸음을 내딛다
·
회고/나의 이야기
들어가며스무 살, 설레는 마음으로 대학교에 첫발을 내디뎠던 때가 엊그제 같은데, 어느새 스물셋의 아침이 밝아버렸다는 사실이 아직도 믿기지 않아요. 그동안 참 바쁜 날들의 연속이었습니다. 작년에 밴드 동아리 회장을 맡아 바쁜 나날을 보내며 이보다 더 바쁠 순 없다고 생각했었는데, 올해는 그보다 더한 시간을 보냈던 것 같아요. 밥 먹고 숨만 쉬며 코딩에 몰두했던 날들이었어요. 힘들기도 했지만, 그 속에서 느낀 즐거움이 훨씬 더 컸습니다. 제가 정말 좋아하는 일을 찾았다는 사실이 무엇보다 행복했거든요. 잠도 제대로 못 잤는데, 코딩할 때만큼은 별로 피곤하지 않았던 것 같아요. 이번 글을 통해 바쁘고도 뜻깊었던 시간을 돌아보고, 앞으로를 다짐하고자 합니다. 매번 딱딱하게 정리 글만 작성했던 것과 달리, 조금은..
soeun2537
Hello, 소은!