2. Set 2-1. HashSet HashSet은 Set 인터페이스를 구현한 가장 대표적인 컬렉션이며, Set 인터페이스의 특징대로 HashSet은 중복된 요소를 저장하지 않는다. 그리고 List 인터페이스를 구현한 컬렉션들과 달리, HashSet은 저장순서를 유지하지 않으므로 저장 순서를 유지하고자 한다면 LinkedHashSet을 사용해야 한다. HashSet이 중복을 막는 법 HashSet는 add메서드를 사용해서 새로운 요소를 추가할 때, 기존의 요소와 동일한 요소인지 판별하기 위해, equals와 hashCode 메서드를 호출한다. 그렇기 때문에, 해당 객체를 set에 넣어서 올바른 결과를 얻기 위해서는 equals와 hashCode 메서드를 목적에 맞게 오버라이딩해야 한다. public cl..
1권에서 습득한 객체지향 관점 놓치지 않기! 컬렉션 프레임워크 컬렉션 프레임워크는 다수의 데이터(컬렉션)를 다루는데 필요한 다양하고 풍부한 클래스들을 제공한다. 또한 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있기 때문에 재사용성이 높은 코드를 작성할 수 있도록 해준다. 컬렉션 프레임워크의 핵심 인터페이스 컬렉션 프레임워크에서는 컬렉션(데이터 그룹)을 크게 3가지 타입이 존재한다고 인식하고 각 컬렉션을 다루는데 필요한 기능을 가진 3개의 인터페이스를 정의하였다. 이때 List 인터페이스와 Set 인터페이스는 공통부분이 많아 해당 공통부분을 다시 뽑아 Collection 인터페이스를 정의하였다. 하지만 Set 인터페이스의 경우 공통되는 부분이 아예 없어 따로 떨어져 있다. 이 3가지 인..
프로그램 오류 컴파일 에러 : 컴파일 시에 발생하는 에러 런타임 에러 : 실행 시에 발생하는 에러 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것 에러와 예외 에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 예외 클래스의 계층 구조 RuntimeException클래스와 그 하위클래스들 프로그래머의 실수로 발생하는 예외 Exception클래스와 그 하위클래스들 (RuntimeException클래스와 하위클래스들 제외) 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외 예외처리 하기 : try-catch문 : 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것이다. 프로그램의 비..
추상클래스와 추상메서드 abstract class 클래스이름 { void play(int pos); void stop(); } class AudioPlayer extends Player { void play(int pos) { } void stop() { } } abstract class AbstractPla extends Player { void play(int pos) { } } 추상클래스는 키워드 abstract를 붙이기만 하면 된다. 즉, 해당 클래스는 추상메서드가 있으니 상속받아 구현해야 한다는 의미를 포함한다. 추상클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 추상클래스의 모든 추상메서드를 구현해주어야 한다. 만약, 상속받은 추상메서드 중 하나라도 구현하지 않는다면, 해당 서브클래스 역시..
오버라이딩 : 상위 클래스에게 상속받은 메서드를 그대로 사용하기도 하지만, 하위 클래스 자신에 맞게 변경하는 것이다. 오버라이딩 조건 자손 클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와 이름이 같아야 한다. 매개변수가 같아야 한다. 반환타입이 같아야 한다. 한마디로 요약하자면 선언부가 완전히 일치해야 한다. 다만 접근 제어와 예외는 제한된 조건 하에서만 다르게 변경할 수 있다. 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 있다. 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 있다. super super는 자손 클래스에서 상위클래스로부터 상속받은 멤버를 참조하는 데 사용하는 참조 변수이다. super() super()는 상위클래스의 생성자를 호출하는데 사용된다. stat..
오버로딩 : 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것 오버로딩의 조건 메서드 이름이 같아야 한다. 매개변수의 개수 또는 타입이 달라야 한다. 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다. 가장 대표적인 오버로딩 ex) println() 오버로딩의 장점 이름만 보고도 메서드들의 기능을 예측 가능 메서드의 이름 절약! 생성자 : 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드 연산자 new가 인스턴스를 생성하는 것이지, 생성자가 인스턴스를 생성하는 것이 아니다. 생성자는 그저 인스턴스 변수들의 초기화에 사용되는 조금 특별한 메서드일 뿐이다. 생성자의 조건 생성자의 이름은 클래스의 이름과 같아야 한다. 생성자는 리턴 값이 없다. 기본 생성자 기본 생성자가 컴파일러에 의해..
객체지향언어 객체지향 언어의 주요 특징 코드의 재사용성이 높다. → 기존의 코드 재사용 코드의 관리가 용이하다. → 적은 노력으로 쉽게 코드 변경 가능 신뢰성이 높은 프로그래밍을 가능하게 한다. → 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 한다. 너무 객체지향개념에 얽매여서 고민하기보다는 일단 프로그램을 기능적으로 완성한 다음 어떻게 하면 보다 객체지향적으로 코드를 개선할 수 있을지를 고민하여 점차 개선해 나가는 것이 좋다. 우아한 프리코스 1주차 미션인 숫자야구게임을 풀 때... 시작부터 객체지향적으로 짜고 싶어 헤맸던 기억이 떠올랐다.. 앞으로 기능을 먼저 구현한 후 개선해야겠다. 클래스와 객체 클래스 : 객체를 정의해놓은 것 객체 : 객체의 설계도 또는 틀 객체의 구성 요..
String 배열 String 배열의 선언과 생성 String[] name = new String[3]; 배열의 타입이 String인 경우에도 int 배열의 선언 및 생성 방법과 다르지 않다. 하지만 참조형 변수(String)의 기본값은 null이기 때문에 각 요소의 값이 null로 초기화된다. String 배열의 초기화 String[] name = new String[]{"Kim", "Yi", "Park"} 또는 인덱스를 지정하여 하나하나씩 초기화해주는 방법이 있다. char 배열과 String 클래스 String 클래스는 char 배열에 기능을 추가한 것이다. 객체지향언어인 자바에서는 char 배열과 그에 관련된 기능들을 함께 묶어서 클래스에 저장한다. 객체지향개념이 나오기 이전의 언어들은 데이터와 ..