반응형

전체 글 114

OS를 다시 공부하며..

작년 여름 방학에 2달간 한빛 미디어의 교재를 가지고 지옥 CS 스터디를 진행했었다. 당시에는 어느정도 상당히 깊은 내용까지 구글링하며 개념들을 숙지하고 있었으나, 반년이 지난 지금은 약간 흐릿하다. 따라서, 명강의라는 반효경 교수님의 KOCW 강의를 들으며 간단하게 내용 정리 겸 포스팅을 이어나갈 계획이다.

[제네릭] Unbounded Wildcard Type인 컬렉션에는 왜 null 값만 들어가는가?

이펙티브 자바 스터디에서 제가 발표한 아이템 26의 내용에 대해 한분께서 좋은 질문을 해주셨습니다. 바로 Unbounded Wildcard Type 타입을 가지는 컬렉션에는 (null 외에는) 어떤 원소도 넣을 수 없는데 이를 왜 사용해야 하는가? 라는 질문이었습니다. raw type public class Test { public static void main(String[] args) { List list1 = new ArrayList(); list1.add("fdf"); // 컴파일 가능 list1.add(3); // ?? list1.add(true); // 너넨 왜 담아지는거야? } } 제네릭을 반드시 써야하는 이유를 알기 전에 로 타입을 쓰지 말아야 할 이유부터 알아보겠습니다. 절대 쓰지 말아야..

개발 2022.02.07

[SSAFY/싸피] 1월 교육 회고록

한 달 간의 회고 지난 1달간 매일 아침 9시부터 저녁 6시까지 싸피 교육을 들었습니다. 개인적인 욕심으로 알고리즘 스터디와 이펙티브 자바 스터디, 스타트업 활동 등을 병행하면서 3주차쯤부터는 온몸에 피로가 돌기 시작했던 것 같습니다. 다행히 설 명절으로 인해 조금은 여유를 가지고 몸을 추스릴 수 있었고 지금부터 회고록을 작성해보겠습니다! 스타트 캠프 갑작스런 일정 변경 분명히 싸피 교육은 1월 17일부터 시작하는 것으로 알고 있었습니다. 1월 5일에는 그저 오티를 진행하는 것으로 알고 있었고... 그래서 마지막으로 강릉으로 떠나는 가족 여행 일자를 1월 13일 ~ 1월 15일까지 잡았습니다. 하지만... 싸피는 1월 5일 오티를 기점으로 스타트 캠프라는 맘에 들지 않는 교육을 하기 시작했습니다. 무거운..

교육 2022.02.02

[예외 처리] getMessage를 출력했는데 null이 왜 나와?

제가 오늘 겪었던 문제에 대해서 아주 간단하게 만든 예제 코드를 작성해봤습니다. 어떤 실수였는지 한번 유추해보시면 좋을 것 같습니다. 클래스 다이어그램 클래스 구조를 한 눈에 알아보기 쉽게 해드리기 위해서 Intellij의 내부 기능을 활용해 다이어그램을 만들어 봤습니다. BookManagerImpl 클래스는 IBookManager 인터페이스의 구현체이며, add()와 sell() 메서드를 구현하고 있습니다. Book 클래스는 isbn(String), title(String), quantity(int) 필드를 가지며, BookManagerImpl 클래스 내부의 books 리스트에 저장될 수 있습니다. RuntimeException을 상속한 custom 예외인 ISBNNotFoundException과 Qu..

트러블 슈팅 2022.01.25

[Java] 공급자 Supplier<T>

공급자 내부 코드 @FunctionalInterface public interface Supplier { T get(); } Supplier는 매개변수를 받지 않고 단순히 반환하는 추상 메서드가 존재한다 활용 방식 1. 문자열 return public class SupplierStringReturn { public static void main(String[] args) { Supplier helloSupplier = () -> "Hi"; System.out.println(helloSupplier.get()); } } // 결과 // Hi 2. 객체 return public class SupplierObjectReturn { static class Point { } public static void ma..

개발 2022.01.25

[5분 개념] 제네릭 싱글턴 팩터리

제네릭 싱글턴 팩터리 정의 제네릭으로 타입 설정 가능한 인스턴스를 만들어두고, 반환 시에 제네릭으로 받은 타입을 이용해 타입을 결정한다. 장점 여러 타입으로 내부 객체를 받아도 에러가 나지 않는다 큰 유연성을 제공한다 public class GenericSingletonFactory { public static final Set EMPTY_SET = new HashSet(); public static final Set emptySet() { return (Set) EMPTY_SET; } public static void main(String[] args) { Set set1 = GenericSingletonFactory.emptySet(); Set set2 = GenericSingletonFactory...

개발 2022.01.24

[Java] 예제 코드로 알아보는 다형성 - 2

2022.01.24 - [Java] - [Java] 예제 코드로 알아보는 다형성 - 1 [Java] 예제 코드로 알아보는 다형성 - 1 정의 다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미합니다. 자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조 hwan33.tistory.com 이전 포스팅을 이어가도록 하겠습니다. 다형성 Quiz 1. 다음 코드의 결과를 예측하시오 class SuperClass { String x = "super"; public void method() { System.out.println("super class method"); } } class SubClass extends SuperClass..

개발 2022.01.24

[Java] 예제 코드로 알아보는 다형성 - 1

정의 다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미합니다. 자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있습니다. 다형성은 상속, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나입니다. 참고 Tcp School 저도 다형성의 정의에 대해서는 이해하고 있다고만 생각했습니다. 왜냐하면 아래와 같은 코드들을 활용한다면 다형성을 충분히 이용하는 것이라 생각했기 때문입니다. class Animal {...} class Human extends Animal {...} class Korean extends Human {...} public class Main { public..

개발 2022.01.24

[이펙티브 자바] 아이템 02. 생성자에 매개변수가 많다면 빌더를 고려하라

Start Quiz 질문 1. 생성자와 아이템 1에서 다룬 정적 팩터리 중에서 선택적 매개변수가 많을 때 적절히 대응할 수 있는 방식은?     정답 둘 다 적절히 대응하기 어렵습니다. 선택적 매개변수가 많을 때는 빌더를 고려해야 합니다.  본 내용 문제 상황 매개변수가 많은 클래스를 생성하고 싶다! 해결책 1. 점층적 생성자 패턴 (not the best) 선택적 매개변수가 많은 경우, 프로그래머들은 점층적 생성자 패턴(telescoping constructor pattern)을 즐겨 사용했다. 아래의 코드는 점층적 생성자 패턴의 책 내 예시를 변형한 코드이다. public class NutritionFacts { private final int servingSize; // 필수 ..

독서 2022.01.18

[이펙티브 자바] 아이템 01. 생성자 대신 정적 팩터리 메서드를 고려하라

Quiz질문 1. true, false를 나타내는 인스턴스를 매번 생성해야하는 문제는 어떻게 해결할 수 있을까?   정답 아래 코드와 같이 Boolean 클래스 내에 선언된 static final 변수를 가져오면 된다.public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE;}  질문 2. 아래 테스트 코드의 결과는 true 인가 false 인가?public static void main(String[] args) throws IOException { Boolean bool = true; Boolean bool2 = true; Boolean bool3 = Boolean.T..

독서 2022.01.18
반응형