Language/Java
-
[Java] 제네릭 제한된 타입 파라미터, 와일드카드Language/Java 2020. 8. 24. 02:03
제한된 제네릭 클래스 타입 문자로 사용할 타입을 명시하면 한 종류의 타입만 저장할 수 있도록 제한할 수 있지만, 그래도 여전히 모든 종류의 타입을 지정할 수 있다는 것에는 변함이 없다. class FruitBox { // Generic } FruitBox fruitBox = new FruitBox(); fruitBox.add(new Toy()); 그렇다면 타입 매게변수 T에 지정할 수 있는 타입의 종류를 제한할 수 있는 방법은 없을까? class FruitBox { // Fruit의 자손만 타입으로 지정가능 // Logic } 여전히 한 종류의 타입만 담을 수 있지만, Fruit 클래스와 같거나 자손들만 담을 수 있다는 제한이 추가 되었다. FruitBox appleBox = new Fruit(); //..
-
[Java] 제네릭 메소드(Generic Method)란?Language/Java 2020. 8. 22. 11:00
제너릭 메소드 제네릭 메소드는 메소드의 선언 부에 적은 제네릭으로 리턴 타입, 파라미터의 타입이 정해지는 메소드이다. 제너릭에 대한 예시를 보면서 이해해보자. public class Student { static T name; } 먼저 static 변수는 제너릭은 사용할 수 없다. 왜냐하면 Student 클래스가 인스턴스가 되기 전에 static은 메모리에 올라가는데 이 때 name의 타입인 T가 결정되지 않기 때문에 위와 같이 사용할 수 없는 것이다. public class Student { static T getName(T name) { return name; } } static 메소드에도 제너릭을 사용하면 에러가 발생하는 이유는 static 변수와 마찬가지로 Student 클래스가 인스턴스화 되기 ..
-
[Java] throws와 throw의 차이는?Language/Java 2020. 4. 10. 14:03
throw와 throws의 차이점 throw : 에러를 고의로 발생시킬 때 사용합니다. throws : 자신을 호출한 상위 메소드로 에러를 던지는 역할을 합니다. throw란? 예제 코드를 먼저 보겠습니다. public class File { public File(String pathname) { if (pathname == null) { throw new NullPointerException(); } this.path = fs.normalize(pathname); this.prefixLength = fs.prefixLength(this.path); } } File 클래스의 생성자를 보면 위와 같이 경로가 null 일 때 throw를 통해서 강제로 에러를 발생하는 것을 볼 수 있습니다. 위와 같이 thr..
-
[Java] 체크예외와 언체크 예외(Checked, Unchecked Exception)란?Language/Java 2020. 4. 10. 11:18
에러(error)와 예외(exception)의 차이는 알 것이다. 에러의 예시는 메모리 부족(OutofMemoryError)이나 스택오버플로우(StackOverflowError)처럼 복구하기 힘든 것이고, 예외는 상대적으로 덜 심각해 처리할 수 있는 것이다. 자바는 예외를 클래스로 만들어서 관리를 하고 전체 계층 구성도는 위와 같다. 여기서 잘 봐야 할 점은 Exception 클래스와 RuntimeException 클래스를 주의 깊게 보자. RuntimeException에 대해서 먼저 말하자면 말 그대로 프로그래머의 실수에 의해서 Runtime시에 예외가 발생할 수 있는 것들이다. (예를들어, 범위 밖의 인덱스를 참조한다던지, 분모를 0으로 나눈다던지 등이 있다) Checked와 Unchecked를 말하..
-
[Java] HashMap을 정렬하는 방법Language/Java 2020. 4. 8. 23:37
Map의 구조처럼 Key, Value의 형태를 정렬을 할 때는 Comparable or Comparator 인터페이스를 구현한 후에 해당 인터페이스에 맞는 compare or compareTo 메소드를 오버라이딩 해서 정렬의 기준을 재정의 한 후에 하면 된다는 것은 알았지만 자세히 사용법을 정리해보려 한다. Key를 기준으로 정렬을 하고 싶다는 그냥 TreeMap을 이용하면 된다. 하지만 Value를 기준으로 정렬하고 싶다면 어떻게 해야할까? 1. Value를 기준으로 Map을 정렬하기 Value를 기준으로 정렬하고 싶다면 위에서 말한 것처럼 Comparator 인터페이스를 implements 한 후에 compare 메소드를 오버라이딩 하여야 한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 ..
-
[Java] LinkedHashMap은 무엇일까?Language/Java 2020. 4. 8. 18:48
HashMap에 대해서 간략하게라도 알고 있다면 LinkedHashMap을 이름만 봐도 LinkedList + HashMap 합쳐진 것이라고 추측할 수 있다. HashMap은 순서가 존재하지 않는다. (즉 버전에 따라 환경에 따라 달라진다는 뜻이다) 그래서 내가 추측했던 것 처럼 실제로 LinkedHashMap은 HashMap에서 자료들이 입력된 순서를 기억하는 것을 추가하기 위해 만든 클래스이다. 사실 왜 HashMap이 데이터의 순서를 유지하지 않는지?에 대해서는 깊게 생각해본적이 없다. 이번에 짧게라도 생각해보면서 공부한 것을 정리해보려 한다. HashMap이 데이터의 순서를 유지하지 않는 이유 HashMap은 연관 배열을 저장하기 위한 자료구조이다. (연관 배열이라는 말은 처음 들어본다) 그러면 ..
-
[Java] char배열과 String 클래스의 차이는?Language/Java 2020. 3. 31. 15:08
지금까지 여러 문자, 즉 문자열을 저장할 때 String타입의 변수를 사용했다. 사실 문자열이라는 용어는 '문자를 연이어 늘어놓은 것'을 의미하므로 문자배열인 char배열과 같은 뜻이다. 자바에서는 char배열이 아닌 String클래스를 이용해서 문자열을 처리하는 이유는 무엇일까? String클래스는 char배열에 기능(메서드)을 추가한 것이다. char배열과 String클래스의 한 가지 중요한 차이가 있는데, String객체(문자열)는 읽을수만 있을 뿐 내용을 변경할 수 없다는 것이다. 1 2 3 4 5 6 7 public class Test { public static void main(String[] args) { String str = "Java"; str = str + "8"; System.ou..
-
[Java] Java는 Call by Value 일까? Call by Reference 일까?Language/Java 2020. 3. 17. 15:32
https://devlog-wjdrbs96.tistory.com/44?category=830071 [JAVA]Call by Value 와 Call by reference 란 ? C언어를 주로 공부 했던 나는 Call by value 와 Call by reference 에 대해서 call by value 는 값을 넘기는 거고 call by reference 는 포인터를 이용해서 주소를 넘긴다고 알고 있다. 하지만 누군가 나에게 이.. devlog-wjdrbs96.tistory.com Call by Value와 Call by Reference에 대해서는 위에서 참고하길 바란다. 현재 운영하는 블로그는 스스로 공부한 것을 나중에 다시 찾아보기 쉽게 정리하는 공간입니다. 1. Java는 Call by Value..