2020-12-12 자바의 특징 중 하나는 자동으로 참조하지 않는 배열이나 객체를 Garbage Collector를 사용해 힙 영역에서 제거시킨다. 이러한 기능을 수행하는 메서드가 바로 finalize()이다. 자동으로 실행되는 해당 메서드를 사용자가 원할 경우 직접 오버 라이딩하여 사용할 수 있는데, 이와 같은 방법을 알아보도록 하자. package Finalize; public class check { private int checkNum; public check(int checkNum) { this.checkNum =checkNum; } @Override protected void finalize() throws Throwable { System.out.println(checkNum + "에 있는 ..
2020-12-11 toString 메서드는 Object 클래스에 속해있는 메서드이다. 기능으로는 객체의 문자정보를 "Class(이름)@16진수의 해시 코드"로 Console 창에 출력하는 기능을 가지고 있다. 위의 코드는 단순하게 Object 객체를 하나 만들고 해당 객체를 toString 메서드로 출력하는 코드로 위와 같은 결과를 얻을 수 있다. 보통은 Object 자체의 메서드로는 활용하지 않고 Date 와 같은 현재의 날짜 정보를 출력할 때나 아니면, 별개의 클래스에 Override(재정의)하여 사용하곤 한다. 아래는 구체적인 예이다. 위는 Date 타입의 객체를 생성한 후 기존에 Object 클래스와 마찬가지로 출력해보았다. 결과적으로 현재의 날짜와 시간이 정상적으로 출력되는 것을 확인할 수 있..
2020-12-08 해시 코드란 객체를 식별하는 하나의 정수 값을 나타내는 말이다. 이는 각 객체의 메모리 번지마다 다른 해시 코드 값을 만들어 리턴하기 때문에, 객체마다 다른 값을 가지게 된다. 해당 해시코드는 HasMap / HashSet / Hashtable과 같은 프레임워크에서 논리적 동등 여부를 체크하기 위해서 오버라이딩되곤 하는데, 이와 같은 오버라이딩을 하는 이유를 알아보자. package hashCode; public class thashCode { public int key; public thashCode(int key) { this.key = key; } @Override public boolean equals(Object obj) { if(obj instanceof thashCode)..
2020-12-05 와일드카드는 제네릭 타입을 매개 값이나 리턴 타입으로 사용할 때 구체적인 타입 대신에 사용하는 것으로 코드에서는?로 표현된다. 사용법은 3가지로 나누어 지며, 아래와 같다. 1. 제네릭타입 : 모든 클래스 / 인터페이스 타입이 올 수 있다. 2. 제네릭타입
2020-12-04 (제네릭의 기초적인 개념과 기존 예제가 궁금하면, 아래 링크로 가서 확인하고 오자.) seeminglyjs.tistory.com/184 제네릭에는 다양한 타입들이 들어갈 수 있지만, 특정 경우에는 제네릭에 들어갈 타입을 제한시켜야 하는 경우가 있다. 예를 들자면 어떤 클래스 필드에 age(나이)라는 변수가 있다고 가정해 보자. 이러한 경우에는 해당 제네릭 타입을 숫자로 받아야 하기 때문에 Integer / short / double...과 같은 숫자형 타입으로 한정 지을 수 있다. 이를 제한된 타입 파라미터라고 한다. 그러면 이제 구체적인 코드를 살펴보도록 하자. package Generic1; public class man2{ public static int compareAge(T ..
2020-12-03 제네릭(Generic) 은 클래스 / 인터페이스 / 메서드 등의 타입을 파라미터로 사용할 수 있게 해주는 역할을 한다. 또한 비제네릭 타입의 코드에서 발생하는 불필요한 타입 변환으로 인한 프로그램 성능의 저하를 감소시킬 수 있다는 장점도 있다. (List list = new ArrayList (); 에서 많이 봤을 바로 가 바로 제네릭 표현식이다.) 클래스에서의 제네릭 선언 방법은 아래와 같다. package Generic1; public class man { private T name; //이름 필드 private T bloodtype; //혈액형 필드 public T getName() { return name; } public void setName(T name) { this.na..