Generics 란? ✅ 자바 8 에서 추가됨 데이터 타입(data type)을 일반화한다(Generalize)는 것을 의미 == 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입을 가질 수 있도록 하는 방법 프로그램에서 변수를 선언할 때 모든 변수는 자료형을 가지고 있음. (int, double, char ...) 뿐만 아니라 메소드에서 매개변수를 사용하는 경우에도 자료형을 가지고 있음. public void add(int a, int b){} 이처럼 일반적인 경우에는 하나의 자료형으로 구현하지만, 변수나 메소드의 자료형을 필요에 따라 여러 자료형으로 바꿀 수 있다면 프로그램은 훨씬! 유연해진다. 이와 같이 어떤 값이 참조하는 자료형이 아닌 여러 참조형을 사용할 수 있도록 프로그래밍 하..
들어가기에 앞서.. java.util 패키지 java.util 패키지에는 프로그램을 개발하는 데 사용할 수 있는 유용한 유틸리티 클래스가 다수 포함되어 있음 실제로 java.lang 패키지 다음으로 가장 많이 사용하는 패키지 import문을 사용하지 않아도 사용할 수 있는 java.lang과 달리 java.util 패키지는 import 문으로 패키지를 불러와야 클래스 이름만 사용 가능 java.util.Arrays 클래스 Arrays 클래스에는 배열을 다루기 위한 다양한 메소드가 포함되어 있음 binarySearch() 메소드 이분 검색 알고리즘(반씩 범위를 쪼개며 검색) 사용하기 때문에 정렬(sort())이 되어 있어야 함!! 해당 위치 반환 🐸 sort() 메소드 오름 차순 정렬 sort() 메소드는..
Wrapper 클래스란? 기본 타입을 객체 타입으로 변환시켜 주는 것 왜? 컬렉션 프레임워크에서 사용되는 자료형은 모두 객체 타입이므로 기본 타입 사용 불가 객체 타입만 사용하는 이유는? 일반화 프로그램을 위해서 일반화 프로그램이 뭔데 여러가지 다양한 데이터 타입에 대해서 동일한 자료구조로 관리하는 것 일례로, 기본 타입은 타입별로 데이터 크기가 다름(char 2byte, int 4byte, double 8byte...) 그에 반해 객체의 주소를 참조하는 데이터 크기는 8byte(64bit 기준)로 모두 동일. 기본 타입 래퍼 클래스 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boo..
Data() 1970년 1월 1일 0시 0분 0초에서 현재까지의 경과시간으로 시간 계산(msec) 객체 생성 후 사용!!! SimpleDateFormat 운영체제로 부터 얻어진 시간 정보를 원하는 포맷으로 변경해서 출력(pattern 매칭) yyyy : 연도를 4자리로 표현 MM : 월을 2자리로 표현 dd : 일을 2자리로 표현 hh : 12시간제 HH : 24시간제 mm : 분을 2자리로 표현 ss : 초를 2자리로 표현 W : 월의 몇 번째 주 w : 년의 몇 번째 주 public class Main { public static void main(String[] args) { Date now = new Date(); SimpleDateFormat = f1, f2, f3, f4, f5, f6, f7;..
Enum 클래스(열거타입) 한정된 값인 열거 상수 중에서 하나의 상수를 저장하는 타입 열거체를 비교할 때 실제 값 뿐만 아니라 타입까지 체크 JDK 1.5에서 해당 기능 추가(기존의 public class 내 final static으로 정의하던 부분 대체) 열거 타입 선언했다면 타입 사용 가능 ➡️ 열거 타입도 하나의 데이터 타입이므로 변수를 선언하고 사용해야 함. public enum DevType { MOBILE, FRONTEND, BACKEND, DBA, EMBEDDED } public enum Career { JUNIOR, SENIOR } public class Developer { private String name; private DevType type; private Career career..
Math 클래스 수학에서 자주 사용하는 상수들과 함수들을 미리 구현해 놓은 클래스 Math 클래스의 모든 메소드는 클래스 메소드(static method)이므로, 객체를 생성하지 않고도 바로 사용 Math 클래스는 java.lang 패키지에 포함되어 제공됨. random() 메소드 0.0 ~ 1.0 미만의 범위에서 임의의 double형 값을 하나 생성하여 반환 ✅ 0 ~ 99 사이의 임의의 수 생성 System.out.println((int)(Math.random() * 100)); ✅ 3 ~ 8 사이의 임의의 수 생성 System.out.println((int)(Math.random() * 6) + 3); 간단 예제) ✏️7자리의 로또 번호 생성하기 : 첫번째 ~ 여섯번째는 0 ~ 50 사이의 임의의 ..
StringBuffer 객체 생성 후 사용 문자열 추가 시 기존의 문자열이 수정됨. 동기화 지원(멀티스레드에서 안전함) 값을 변경할 수 있어서(mutable) 한번 생성된 값은 언제든지 수정 가능 StringBuilder 객체 생성 후 사용 문자열 추가 시 기존 문자열이 수정됨. 동기화를 지원하지 않지만 성능은 우수함. String 객체 생성 필요 없음 문자열 추가 시 계속 새로운 문자열이 만들어 짐. 문자열 추가가 많아지면 많아질 수록 성능 저하 한번 값이 생성되면 그 값을 변경할 수 없음.(immutable) StringBuffer와 String의 결과는 동일하지만 내부적으로 객체가 생성되고 메모리가 사용되는 과정은 다름. * StringBuffer 객체는 한번만 생성된다. * String 자료형은 ..
Object 클래스란? java.lang 패키지 중에서도 가장 많이 사용되는 클래스 모든 자바 클래스의 최고 조상 클래스 모든 클래스는 Object 클래스를 상속 받음. -> Object가 가진 메소드를 모든 클래스가 가지고 있음. toString() 메소드 해당 인스턴스에 대한 정보를 문자열로 반환 이 때 반환되는 문자열은 클래스 이름과 함께 구분자로 '@'가 사용되며, 그 뒤로 16진수 해시 코드가 추가 됨. 16진수 해시 코드 값은 인스턴스의 주소를 가리키는 값으로, 인스턴스마다 모두 다르게 반환 됨. class Student { int id; String name; } 위 코드는 컴파일 과정에서 아래와 같이 변경됨. class Student extends Object { int id; String..
다운 캐스팅이란? 상위 클래스형으로 변환 되었던 하위 클래스를 다시 원래 자료형으로 변환하는 것 instanceof 형 변환 가능 여부 확인(참조 변수가 참조하고 있는 객체(인스턴스)의 실제 타입을 알기 위해 사용) 쉬운 예를 들어.. 상속 관계를 생각해 보면 모든 인간은 동물이지만 모든 동물은 인간이 아닙니다. 따라서 다운 캐스팅을 하기 전에 상위 클래스로 형 변환된 인스턴스의 원래 자료형을 확인해야 변환할 때 오류를 막을 수 있습니다. public class Animal { public void move() { System.out.println("동물이 움직입니다."); } } class Human extends Animal { @Override public void move() { System.ou..
중첩 인터페이스란? 클래스 내부에 선언한 인터페이스 주로 UI 프로그래밍에서 이벤트 처리를 위해 사용함(예. 안드로이드) 인터페이스를 클래스 내부에 선언하는 이유는 해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위해서 이다. Button을 클릭 했을 때, 이벤트를 처리하는 객체를 받고 싶은 경우에 Button 내부에 선언된 중첩 인터페이스를 구현한 객체만 받아야 한다면 아래와 같이 Button 클래스를 선언하면 된다. Button public class Button { OnClickListener listener; void setOnClickListener(OnClickListener listener) { this.listener = listener; } void touch() { listene..