분류 전체보기
-
Java - 제네릭(Generic)의 제한 - extends, super, ?Language/Java 2022. 12. 28. 14:57
제네릭(Generic)의 제한 - extends, super, ? 개요 이전 게시글에서는 제네릭의 가장 일반적인 사용법과 특성에 대해서 알아보았다. 예를 들어, 타입을 T라고 하고 외부에서 Integer로 지정하면 T는 Integer가 되고, String으로 지정하면 T는 String이 된다. 만약, Student 클래스를 만들고 T를 Student를 지정한다면 T는 Student가 된다. 즉, 제네릭은 이 처럼 참조 타입 모두가 될 수 있다. 만약, 이러한 T를 특정 범위 내로 좁혀서 제한하고 싶다면 어떻게 해야 할까? 이때 필요한 것이 바로 extends, super, ?이다. extends와 super이라는 키워드는 많이 보았을 것이다. ?는 와일드카드라고 해서 쉽게 말해 알 수 없는 타입이라는 의..
-
Java - 제네릭(Generic)의 특성Language/Java 2022. 12. 28. 09:50
제네릭(Generic)의 특성 복수의 제네릭 사용 class EmployeeInfo { public int rank; EmployeeInfo(int rank) { this.rank = rank }; } class Person { public T info; public S id; Person (T info, S id) { this.info = info; this.id = id; } } public class GenericDemo { public static void main(String[] args) { Person p = new Person(new EmployeeInfo(1), 1); } } 클래스 내에서는 여러 개의 제네릭을 필요로 하는 경우가 있을 것이다. 위 코드는 이러한 경우의 예이다. 위 코드는..
-
Java - 제네릭(Generic)을 사용하는 이유Language/Java 2022. 12. 27. 17:26
제네릭(Generic)을 사용하는 이유 제네릭을 사용하지 않을 경우의 문제점 - 타입 안전성 class StudentInfo { public int grade; public StudentInfo(int grade) { this.grade = grade; } } class StudentPerson { public StudentInfo studentInfo; public StudentPerson(StudentInfo studentInfo) { this.studentInfo = studentInfo; } } class EmployeeInfo { public int rank; public EmployeeInfo(int rank) { this.rank = rank; } } class EmployeePerson {..
-
Java - 제네릭(Generic)이란?Language/Java 2022. 12. 27. 16:31
제네릭이란? 제네릭이란? 제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 특정 클래스를 인스턴스화 할때, 구체적인 데이터 타입을 언급하는 방식이다. 제네릭의 사용 class Person { public T info; } public class GenericDemo { public static void main(String[] args) { Person p01 = new Person(); Person p02 = new Person(); } } 제네릭 타입의 Person 클래스를 생성한 후, 서로 다른 타입으로 인스턴스를 생성하였다. 각각의 인스턴스를 생성할 때, 사이에 어떠한 데이터 타입을 사용했느냐에 따라 다른 데이터 타입을 가진 인스턴스를 생성할 수 있..
-
클래스와 인터페이스 - 아이템 25. 톱레벨 클래스는 한 파일에 하나만 담으라Study/Effective Java 2022. 12. 27. 14:23
톱레벨 클래스는 한 파일에 하나만 담으라 톱레벨 클래스란? 톱레벨 클래스란 함수, 클래스 또는 다른 무언가로 감싸지지 않은 모든 구문을 의미한다. 즉, 톱레벨 클래스란 중첩 클래스가 아닌 것을 말한다. 다중 톱레벨 클래스의 문제점 소스 파일 하나에 톱레벨 클래스를 여러 개 선언하더라도 자바 컴파일러는 불평하지 않는다. 하지만 아무런 득이 없을뿐더러 심각한 위험을 감수해야 하는 행위다. 이렇게 하면 한 클래스를 여러 가지로 정의할 수 있으며, 그중 어느 것을 사용할지는 어느 소스 파일을 먼저 컴파일하냐에 따라 달라지기 때문이다. 위 문제점에 대한 구체적인 예를 들어 보겠다. // Main.java public class Main { public static void main(String[] args) { ..
-
클래스와 인터페이스 - 아이템 24. 멤버 클래스는 되도록 static으로 만들라Study/Effective Java 2022. 12. 27. 11:29
멤버 클래스는 되도록 static으로 만들라 중첩 클래스란? 중첩 클래스란 다른 클래스 안에 정의된 클래스를 말한다. 중첩 클래스는 자신을 감싼 바깥 클래스에서만 쓰여야 하며, 그 외의 쓰임새가 있다면 톱레벨 클래스로 만들어야 한다. 중첩 클래스의 종류는 정적 멤버 클래스, 비정적 멤버 클래스, 익명 클래스, 지역 클래스 이렇게 네 가지가 존재한다. 이 중 첫 번째를 제외한 나머지는 내부 클래스에 해당한다. 이번 게시글에서는 각각의 중첩 클래스를 언제 그리고 왜 사용해야 하는지에 대해서 알아보겠다. 정적 멤버 클래스 정적 멤버 클래스는 다른 클래스 안에 선언되고, 바깥 클래스의 private 멤버에도 접근할 수 있다. 정적 멤버 클래스는 다른 정적 멤버와 똑같은 접근 규칙을 적용받는다. 예컨대 정적 멤버..