본문 바로가기
String Constant Pool String s1 = "hello"; String s2 = new String("hello"); String s3 = new String("hello").intern(); // s1, s2 비교 System.out.println(s1 == s2); // false System.out.println(s1.equals(s2)); // true // s2, s3 비교 System.out.println(s2 == s3); // false System.out.println(s2.equals(s3)); // true // s1, s3 비교 System.out.println(s1 == s3); // true System.out.println(s1.equals(s3)); // true s1처럼 리터럴로 String 객.. 2022. 3. 25.
Overriding 오버라이딩 Overriding 규칙 1. static, final, private 메소드는 overriding할 수 없다. - static 메소드를 자식 클래스에서 static 메소드로 다시 정의할 때는 method hiding이 일어난다. 2. 메소드 이름, 매개 변수 타입, 리턴 타입이 같아야 한다 3. 부모 클래스에서의 접근 제한보다 더 강할 수 없다. 4. 부모 클래스에서와 같거나 더 좁은 Exception을 발생할 수 있다. Static Method Dispatch vs Dynamic Method Dispatch (정적 바인딩, 동적 바인딩) Static Method Dispatch - 컴파일 시점에서 컴파일러가 어떤 특정 메소드를 호출할 지 정확히 알고 있는 것이다. - 컴파일 코드에 이미 정보가 남아있.. 2022. 3. 14.
Integer.valueOf() vs Integer.parseInt() int num1 = Integer.parseInt("111"); int num2 = Integer.valueOf("111"); System.out.println(num1); //111 System.out.println(num1); //111 위 두 결과가 같게 나온다. 여기서 parseInt()와 valueOf()의 차이점은 무엇일까? parseInt() Java 공식 api 문서를 보면 public static int parseInt(String s) throws NumberFormatException Parses the string argument as a signed decimal integer. The characters in the string must all be decimal digits, .. 2022. 2. 21.
ASCII 코드 / 유니코드 / 인코딩, 디코딩 / UTF-8, EUC-KR ASCII 코드 알파벳 대소문자 - 52문자 숫자 0~9 - 10문자 특수문자 - 66문자 총 위 128개의 문자와 예비문자 128개를 정수(0~255)와 1:1로 매칭한 것이 ASCII 코드이다. 256개 = 2^8 -> 즉, 8bit = 1byte면 서로 다른 알파벳, 숫자, 특수문자 (+예비문자)까지 저장하여 사용할 수 있었다. 유니코드 하지만 ASCII코드만으로는 다른 나라의 언어를 표현할 수 없었다. 1byte로는 부족하니 여러 byte를 사용하여 하나의 문자를 표현하고자 했다. 이와 같은 이유로 전 세계 언어를 모두 매칭, 정의할 수 있는 국제 표준 코드인 유니코드가 등장했다. 인코딩 / 디코딩 인코딩 : 사람이 인지할 수 있는 형태의 데이터를 규칙에 의해 컴퓨터가 사용하는 0, 1로 변환하는.. 2021. 12. 3.
자바 기본 - 다형성 다형성은 하나의 타입에 대입되는 객체에 따라서 실행 결과가 다양한 형태로 나오는 성질을 의미한다. 부모 타입에 어떤 자식 객체를 대입하느냐에 따라 실행 결과가 달라지고, (상속) 인터페이스 타입에 어떤 구현 객체를 대입하느냐에 따라 실행 결과가 달라진다. (인터페이스) 상속은 말 그대로 같은 종류의 자식(하위)클래스를 만드는 기술이고, 인터페이스는 사용 방법이 동일한 클래스를 만드는 기술이다. 2021. 11. 29.
자바 기본 - 인터페이스 인터페이스는 데이터를 저장할 수 없다. 따라서 런타임에 데이터를 저장할 수 있는 필드(인스턴스 필드, 정적 필드)를 선언할 수 없다. 대신 런타임 시 데이터 값이 고정되는 상수 필드는 선언할 수 있다. 단, 상수 선언 시에는 반드시 초기화해야 한다. 디폴트 메소드는 인터페이스에서 선언/구현되는 메소드지만, 실제로는 해당 인스턴스를 구현하는 모든 객체가 갖고 있는 인스턴스 메소드라고 생각해야 한다. 인터페이스에서 구현까지 하는 메소드기 때문에 추가하더라도 구현 클래스에서 에러가 발생하지 않는다. 그리고 필요하다면 구현 클래스에서 그대로 사용해도 되고, 오버라이딩해서 사용할 수도 있다. 2021. 11. 29.
자바 Queue에서 비슷한 메서드 자바에서 자료구조 Queue를 구현해 데이터를 추가/삭제/검색할 때 일어나는 문제 상황에서 예외를 발생시키냐, null 또는 false등의 값을 리턴하냐에 따른 메서드가 따로 있다. 예외 값 리턴 추가 add() offer() 삭제 remove() poll() 검색 element() peek() 예를 들어. 데이터를 추가할 때 꽉찬 상황이라면 add()일 땐 예외를 발생시키고, offer()일 땐 실패를 의미하는 false 값을 리턴한다. 출처 : https://goodteacher.tistory.com/112 2021. 11. 25.
Java 기본 10 - 상속 자식클래스에서 부모클래스의 메소드를 오버라이딩할 때 주의할 점이 있다. - 접근 제한을 변경할 시, 부모클래스에서 보다 더 넓게만 가능하다. class Parent { public method() {..} } class Child extends Parent { @Override method() {...} // compile error } - 더 넓은 범위의 checked exception을 throw할 수 없다. unchecked exception(Runtime Exception)은 상관없다. -> 부모클래스에서 예외를 명시하지 않았으면, 자식클래스에서는 unchecked exception만 새로 명시할 수 있다. -> 부모클래스에서 checked exception을 명시했으면, 자식클래스에서는 같은 e.. 2021. 11. 11.
Java 기본 9 - 중첩 클래스/중첩 인터페이스/익명 클래스 중첩 클래스 특정 클래스와 관계를 맺을 경우는 관계 클래스를 클래스 내부에 선언하는 것이 좋다. 두 클래스(Outer, Inner)의 멤버들을 서로 쉽게 접근할 수 있다. 한 클래스(A)에서만 쓰이는 클래스(B)의 경우, 클래스(B)를 클래스(A)에 내장하도록 하는 것이 가독성, 유지보수 측면 모두에서 좋다. 즉, 외부에는 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다. (캡슐화) 1) 멤버 클래스 1-1) 인스턴스 멤버 클래스 - 외부 클래스 객체를 생성한 후 내부 클래스 객체를 생성하여 사용 - 인스턴스가 생성되어야만 접근할 수 있기 때문에 static member 선언 불가 class Outer { class Inner {...} } //외부클래스 객체 생성, 컴파일 시 Outer.cl.. 2021. 11. 10.
for-each문과 for문의 차이 (for문, 향상된 for문에 대한 기본적인 설명은 생략) LinkedList[] lists = new LinkedList[size]; for(int i=0; i 2021. 11. 3.