반응형

분류 전체보기 98

[제네릭] 제네릭 메서드에 type parameter section이 존재하는 이유가 무엇일까?

이펙티브 자바 스터디에서 제가 발표한 아이템 31의 내용에 대해 스터디원께서 좋은 질문을 해주셨습니다. 바로 제네릭 메서드에서 type parameter section이 존재하는 이유가 무엇일까? 라는 질문이었습니다. 공식 문서 Generic Methods (The Java™ Tutorials > Learning the Java Language > Generics (Updated)) The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technolo..

개발 2022.02.14

[제네릭] Java에서 배열을 공변(covariant)으로 만든 이유는 무엇인가?

이펙티브 자바 스터디에서 제가 발표한 아이템 28의 내용에 대해 스터디원께서 좋은 질문을 해주셨습니다. 바로 Java에서 배열을 공변(covariant)으로 만든 이유가 무엇일까? 라는 질문이었습니다. 공변과 불공변 질문에 대한 답에 앞서 공변과 불공변에 대해 먼저 알아보도록 하겠습니다. 공변 (covariant) 정의 : 함께 변한다 배열은 공변입니다 Sub가 Super의 하위 타입이라면 배열 Sub[]는 배열 Super[]의 하위 타입이 됩니다 예시 코드 // 런타임에 실패한다 Object[] objectArray = new Long[1]; // 컴파일이 되어 버린다.. objectArray[0] = "Hello"; // 런타임에 ArrayStoreException을 던진다.. 위의 코드에서 배열은 ..

개발 2022.02.14

2강. System Structure & Program Execution

컴퓨터 시스템 구조 CPU와 Memory : Computer Disk와 키보드, 프린터, 모니터 : I/O device CPU 메모리보다 더 빠르면서 정보를 저장할 수 있는 register를 가진다 지금 CPU에서 실행되는 것이 운영체제인지 사용자 프로그램인지를 구분해주는 mode bit을 가진다 CPU가 메모리 접근을 하다가 I/O가 발생하면 이를 I/O device의 device controller에 요청하고 자신은 다음 Instruction을 실행한다. 사용자 프로그램은 직접 I/O 접근을 못하므로 자신의 CPU 제어권을 OS에 넘기면서 이를 요청하는 것이며, OS는 device controller에 의해 I/O가 진행되는 동안 CPU의 제어권을 다른 프로그램으로 넘겨준다 I/O 요청을 받은 해당 ..

1강. Introduction to Operating Systems

운영체제 (Operating Systems, OS) 담당 교수 : 반효경, 이화여자대학교 참고 교재 A.Silberschatz et al., Operating System Concepts, Seventh Edition, John Wiley & Sons, Inc. 2004. (또는 동저자의 Operating System Principles, Seventh Edition, Wiley Asia Student Edition) 강의목표 운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각 요소 및 그 알고리즘의 핵심적인 부분에 대해 기초부터 학습한다. 운영체제란 무엇인가? 운영체제란? ..

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
반응형