All 215

Java | Objects.equals()

Objects.equals(Object a, Object b) - 두 객체가 같거나 모두 null인 경우 true 반환 - 두 객체가 다르거나 하나만 null인 경우 false 반환 if (Objects.equals(this.id, user2.getId()) { // do something } 일반적으로 객체로 호출한 equals()를 통해 객체를 비교할 때, 파라미터로 null이 들어올 수 없기 때문에 null 검사가 선행되어야 했었다. 그러나 Objects.equals() 메소드를 사용하면 null까지 비교해주니 편리해보인다. 단, 사용자 정의 클래스는 equals(), hashCode()를 재정의 해야 한다. 2019.05.10 - [IT&프로그래밍/Java] - Java | equals(), ha..

개발_웹/Java 2019.05.10

Java | 제네릭 파라미터 타입 제한, 와일드카드 타입

파라미터 타입 제한 제네릭의 파라미터 타입을 제한하고 싶을 때 사용 예를 들어, 숫자를 연산하는 제네릭 메소드는 매개값으로 Number 타입 또는 하위 클래스인 Byte, Short, Integer, Long, Double 의 인스턴스만 가져야 할 때 사용할 수 있다. 제한된 타입 파라미터를 선언하려면 타입 파라미터 뒤에 extends 키워드를 붙이고 상위 타입을 명시하면 된다. 상위 타입은 인터페이스도 가능하나 implements를 사용하지는 않는다. public int compare(T t1, T t2) { double v1 = t1.doubleValue(); double v2 = t2.doubleValue(); return Double.compare(v1, v2); } 와일드 카드 타입 제네릭 타입..

개발_웹/Java 2019.05.10

Java | equals(), hashCode() 오버라이딩을 통한 객체 비교

equals() 재정의 String 같은 클래스는 equals() 메소드를 사용하여 문자열을 비교할 수 있다. equals()는 String에 대해 서로 다른 객체일지라도 리터럴이 같다면 같은 객체로 인정한다. 그러나 이는 String 클래스에 equals()가 이미 재정의 되어있기 때문이고, 원래 equals() 메소드는 같은 객체에 대해서만 true를 반환한다. 내용이 같더라도 new로 새로 생성하거나 깊은 복사를 통해 만들어진 객체는 주소값이 다르기 때문에 다른 객체로 인식한다. 프로그래머가 만든 객체를 String처럼 내용만 비교하여 같은 객체로 판단하게 하려면 equals() 메소드를 재정의(오버라이딩) 해야한다. @Override public boolean equals(Object obj) {..

개발_웹/Java 2019.05.10

Java | 컬렉션(Collection), 맵(Map) 정렬하기

Map은 Key-Value 구조로 이루어져 있으며, Key는 Set, Value는 List로 구성되어있다. Key를 기준으로 정렬하려면 TreeMap을 사용하면 된다. Value를 기준으로 Map을 정렬하는 방법과 멤버변수를 기준으로 Collection을 정렬하는 방법을 알아보자. 1. Value 값들을 List로 추출 Map인 경우 Value 값들을 List로 추출해준다. list = new ArrayList(map.values()); 2. Comparator 만들기 Comparator 인터페이스를 구현하는 클래스를 만들어 compare() 메소드를 재정의 한다. compare() 메소드는 비교할 두 대상을 파라미터로 받고, 결과에 따라 -1, 0, 1을 반환한다. 반대로 정렬 시에는 클래스를 또 만들..

개발_웹/Java 2019.05.10

Java | toString() 메소드로 객체의 정보 출력하기

toString() 메소드는 Object 클래스의 메소드로 자기자신(객체)을 출력하는 것을 목적으로 한다. System.out.println(obj);와 같은 코드는 자동으로 System.out.println(obj.toString());로 변환된다. toString()은 기본적으로 오브젝트의 클래스명과 해쉬코드값을 출력한다. 필드값과 같은 정보들을 출력하려면 아래와 같이 오버라이딩하여 사용하면 된다. public class Student { private String name; private int id; private int kor, eng, math; private int sum; private double avg; private int rank = 0; static int a; @Override ..

개발_웹/Java 2019.05.10

Java | enum (열거형) 활용하기

Enum은 클래스처럼 사용 가능한 상수 집합이다. 특징 - 정수값만 사용 가능한 C++과 달리(Do=1, Re=2, Mi=3), Java의 Enum은 문자열, 함수(Java 8 이상)도 사용 가능 - 나열할 수 있는 값들의 수는 제한이 없다. - 클래스처럼 사용 가능하다. (필드, 메소드, 생성자 정의 가능) - name에 띄어쓰기는 안 된다 (STARWARS - O, STAR WARS - X) 용도 1. 허용 가능한 값 제한 (국가명, 혈액형 등) 2. 공통 상수로 활용 (경로, 사이즈 등) 기본적인 사용 예 enum ESeason { SPRING, SUMMER, FALL, WINTER } public class EnumBasic { public static void main(String[] args)..

개발_웹/Java 2019.05.10

Java | 접두사와 접미사로 진수, 타입 표현하기

접두사 접두사를 사용하여 8진수(0), 16진수(0x), 2진수(0b)를 표현할 수 있다. int num = 10; int num1 = 010; // 8 (8진수) int num2 = 0x11; // 17 (16진수) int num3 = 0b0011; // 3 (2진수) 접미사 정수 리터럴은 기본적으로 int 형을 표현하므로, long이나 float과 같은 타입을 명시하기 위해서는 접미사를 사용한다. 예를 들어, long a = 3000000000;과 같은 경우 정수(int)로 잡히게 되는데, int는 약 22억까지 표현 가능하므로 범위 밖의 수가 되어버린다. 이를 long 타입으로 만들고 싶으면 long a = 3000000000L; 과 같이 접미사 L을 써주면 long 변수로 잡히게 한다. long ..

개발_웹/Java 2019.05.10

Java | 오버라이딩 (overriding, 재정의)

메소드 오버라이딩 (재정의) 슈퍼 클래스의 메소드를 재정의 하는 것. 슈퍼 클래스의 메소드를 무시하고 서브 클래스에서 오버라이딩된 메소드가 무조건 실행되도록 동적으로 바인딩(binding) 된다. 오버라이딩의 조건 1. 슈퍼 클래스의 메소드와 완전히 동일한 메소드를 재정의한다. (이름, 리턴타입, 파라미터) 2. 슈퍼 클래스의 접근 지정자보다 접근의 범위가 좁아질 수 없다. (부모 default -> 자식 default, protected, public 가능) 3. static, private, final로 선언된 메소드는 오버라이딩 할 수 없다. * 오버라이딩 된 메소드에서 슈퍼클래스의 메소드를 호출하려면 super를 사용한다. @Override func() { super.func(); }

개발_웹/Java 2019.05.10