개발_웹/Java 49

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

Java | this, super / this(), super()

1. this 현재 객체의 주소(레퍼런스). 현재 객체 내의 멤버에 접근한다. 2. super 현재 객체의 슈퍼 클래스 영역의 주소. 슈퍼클래스의 멤버에 접근한다. 오버라이딩 된 메소드는 동적 바인딩되어 서브클래스의 메소드를 호출하므로, 슈퍼클래스의 메소드를 호출하려면 super 키워드를 사용해야 한다. 오버라이딩 시, 기존 부모클래스의 메소드 기능은 유지하되 기능을 추가하고 싶을 때 사용 func() { super.func(); // 부모 메소드의 기능 유지 // 자식만의 코드 } 3. this() - 생성자에서 동일한 클래스 내의 다른 생성자를 호출 시 사용. - 생성자 코드에서만 사용 가능하며, 생성자 코드의 첫 번째 문장에 쓰여야 함 public class Memo { String title; D..

개발_웹/Java 2019.05.09

Java | 예외 처리 (try-catch, throw, throws)

try-catch문 프로그램의 실행 중에 비정상적인 상황이 발생할 경우에는 실행이 중지되고, Exception 객체나 Error 객체가 생성됩니다. try-catch문은 예외(non runtime exception)가 발생할 수 있는 코드를 처리해주는 문법입니다. * catch 문은 여러개 쓸 수 있고, Java7부터 | 연산자로 여러 개의 예외를 괄호안에 넣을 수 있습니다. throws Exception 이 메소드에서 Exception이 발생하면 상위 메소드로 던집니다. throw 에러를 생성하여 catch로 던집니다. catch throw가 던진 에러를 받아 처리합니다. 여기서 throw하면 throws를 통해 상위 메소드로 넘깁니다.

개발_웹/Java 2019.05.09

Java | 예외(Exception)의 종류

1. Java의 특징 Java에서는 JVM을 통해 프로그램 실행 중(런타임)에 예외상황(Exception)이 발생할 경우 프로그램의 정상적인 실행과정과 분리하여 처리할 수 있다. 2. 오류(Error) java.lang.Error 클래스의 서브클래스들로 시스템에 뭔가 비정상적인 상황이 발생했을 경우에 사용된다. 이런 에러에 대한 예외처리는 신경쓰지 않아도 된다. OutofMemoryError나 ThreadDeath 같은 에러는 catch 블럭으로 잡아도 대응 방법이 없다. 예) - 메모리 부족 - 정의 되지 않은 클래스 등 3. 런타임 예외 (Runtime Exception / Unchecked exception) RuntimeException을 상속한 클래스들로 주로 프로그래머의 실수에 의해 발생한다...

개발_웹/Java 2019.05.09

Java | for-each 반복문

for-each 문 JDK 5.0 버전부터는 향상된 for 문(for-each 문)을 지원하고 있습니다. for (변수타입 변수이름 : 배열이름) { // 작업 } for-each 문 에서는 배열의 항목 수만큼 실행부분을 반복하는데 반복이 이루어질 때마다 배열의 항목을 순서대로 꺼내어 변수(number) 에 자동으로 대입해 줍니다. 따로 반복 변수(int i) 를 선언하거나 배열의 값을 가져오는 부분(array[i]) 없이 실행부분에서는 하고자 하는 작업에 집중할 수 있습니다. 자바 for each 문을 사용할 때 주의해야 할 점은 오직 배열의 값을 가져다 사용(read)할 수만 있고 수정(write)할 수 는 없다는 것 입니다. public class ForTest { public static void..

개발_웹/Java 2019.05.09