일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 인터페이스
- node.js
- 코딩
- 바이트 단위 스트림
- 자바
- exception
- 파이팅
- ArrayList
- try-catch
- 변수
- 인스턴스
- 보조 스트림
- 예외 처리
- 졸리다
- 문자 단위 스트림
- 백엔드
- MPA
- 상속
- 다형성
- 자료형
- 코린이
- SSR
- 배열
- Java
- 초보개발자
- FileInputStream
- 새벽공부
- 메서드
- 개발자
- throws
- Today
- Total
목록자바 (53)
SHUSTORY
내부 클래스 정의와 유형 내부 클래스는 '클래스 내부에 선언한 클래스'로, 내부에 클래스를 선언한 이유는 대개 이 클래스와 외부 클래스가 밀접한 관련이 있거나 다른 클래스와 협력할 일이 없는 경우이다. 내부 클래스는 선언하는 위치나 예약어에 따라 크게 다음 네 가지로 나뉜다. 인스턴스 내부 클래스 / 정적(static) 내부 클래스/ 지역(local) 내부 클래스/ 익명(anonymous) 내부 클래스 내부 클래스는 유형에 따라 만드는 방법이 다르며 클래스 내부에 선언할 수 있는 변수 유형과 사용할 수 있는 외부 클래스 변수 유형도 다르다. 인스턴스 내부 클래스 인스턴스 내부 클래스는 인스턴스 변수를 선언할 때와 같은 위치에 선언하며, 외부 클래스 내부에서만 생성하여 사용하는 객체를 선언할 때 쓰인다. ..
Map 인터페이스 Map 인터페이스는 자료를 쌍으로 관리하는 데 필요한 메서드가 정의되어 있다. key-value 쌍으로 이루어진 객체의 key 값은 유일하며 value 값은 중복될 수 있다. Map 인터페이스를 구현한 클래스는 내부적으로 해시 알고리즘에 의해 구현되어 있다. HashMap 클래스 HashMap은 Map 인터페이스를 구현한 클래스 중 가장 많이 사용한다. HashMap에서 자료를 관리하는 방식은 해시 방식으로, 해시 방식의 자료를 저장하는 공간을 해시 테이블이라고 한다. key 값이 정해지면 그에 대응하는 해시 테이블의 저장 위치가 정해지는데 이런 위치를 계산하는 함수가 '해시 함수'이다. 해시 함수를 어떻게 만드느냐는 key 값 특성이나 개발 프로그램 성격에 따라 다를 수 있다. 그런데..
Set 인터페이스 순서와 상관없이 중복을 허락하지 않는 경우 Set 인터페이스를 구현한 클래스를 사용한다. Set 인터페이스를 구현한 대표 클래스에는 HashSet, TreeSet이 있다. HashSet 클래스 HashSet 클래스는 집합 자료 구조를 구현하며 중복을 허용하지 않는다. 예제01에서 볼 수 있듯이 hashSet에 동일한 자료가 추가되지 않는다. 또한 ArrayList는 순서가 있는 자료 구조이기 때문에 추가한 순서대로 출력되지만, HashSet은 자료가 추가된 순서와 상관 없이 출력된다. 회원을 삭제할 때 ArrayList에서는 get(i) 메서드를 사용해 i번째에 해당하는 항목을 삭제한 반면, HashSet에서는 해당하는 아이디를 가진 회원을 찾기 위해 Iterator를 사용한다. 메서드..
* 간단한 회원 관리 프로그램을 만들면서 컬렉션 프레임워크에서 제공하는 각 클래스를 실습해보자. 다음 Member 클래스는 앞으로 실습할 때 계속 사용할 것이다. List 인터페이스 List 인터페이스에는 객체를 순서에 따라 저장하고 유지하는 데 필요한 메서드가 선언되어 있다. 대표적인 순차 자료 구조에는 배열이 있으며, 자바에서 배열을 구현한 대표 클래스로는 ArrayList, Vector가 있으며 배열과 구현 방식은 다르지만 순차 자료 구조를 구현한 LinkedList가 있다. ArrayList 클래스 객체 순서를 기반으로 순차적으로 자료를 관리하는 프로그램을 구현할 때 사용한다. ArrayList를 활용한 회원 관리 프로그램 구현하기 ArrayList를 활용한 MemberArrayList 클래스에 ..
컬렉션 프레임워크 자료 구조는 프로그램 실행 중 메모리에 자료를 유지, 관리하기 위해 사용한다. 자바에서는 필요한 자료 구조를 미리 구현하여 java.util 패키지에서 제공하고 있는데, 이를 컬렉션 프레임워크라고 한다. 자료 구조는 개발자가 직접 만들어 사용할 수도 있지만, 자바 컬렉션 프레임워크를 사용하면 직접 개발하는 수고를 덜고 잘 만들어진 자료 구조 클래스를 활용할 수 있다. 자바 컬렉션 프레임워크에는 여러 인터페이스가 정의되어 있고, 그 인터페이스를 구현한 클래스가 있다. 컬렉션 크레임워크의 전체 구조는 Collection 인터페이스와 Map 인터페이스 기반으로 이루어져 있다. Collection 인터페이스는 하나의 자료를 모아서 관리하는 데 필요한 기능을 제공하고, Map 인터페이스는 쌍으로..
제네릭 프로그램에서 변수를 선언할 때 모든 변수는 자료형이 있으며, 메서드에서 매개변수를 사용할 때도 마찬가지이다. 대부분은 하나의 자료형으로 구현하지만, 어떤 값이 하나의 참조 자료형이 아닌 여러 참조 자료형을 사용할 수 있도록 프로그래밍 하는 것을 '제네릭 프로그래밍' 이라고 한다. 제네릭 프로그램은 참조 자료형이 변환될 때 이에 대한 검증을 컴파일러가 하므로 안정적이다. 다이아몬드 연산자 자바 7부터는 제네릭 자료형의 클래스를 생성할 때 생성자에 사용하는 자료형을 명시하지 않을 수 있다. 여기에서 를 다이아몬드 연산자라고 한다. 선언된 자료형을 보고 생략된 부분이 String임을 컴파일러가 유추할 수 있기 때문에 생성 부분에서는 생략 가능하다. 자료형 매개변수 T와 static stat..
기본 자료형을 위한 클래스 지금까지 정수를 사용할 때 기본형인 int를 사용했다. 그런데 다음과 같이 매개변수가 객체거나 반환 값이 객체형인 경우 정수를 객체형으로 사용해야 한다. 이를 위해 자바에서는 기본 자료형처럼 사용할 수 있는 클래스를 제공한다. 이러한 클래스를 기본 자료형을 감쌌다는 의미로 Wrapper 클래스라고 한다. 기본형 Wrapper 클래스 boolean Boolean byte Byte char Character short Short int Integer long Long float Float double Double Integer 클래스 사용하기 Integer 클래스의 생성자는 다음과 같이 특정 정수를 매개변수로 받는 경우와 문자열을 받는 경우 두 가지가 있다. Integer 클래스 ..
String을 선언하는 두 가지 방법 자바는 문자열을 사용할 수 있도록 String 클래스를 제공한다. String 사용 시 문자열을 생성자의 매개변수로 하여 생성하는 방식과 이미 생성된 문자열 상수를 가리키는 방식이 있다. 비슷해 보이는 위 두 가지 방법에는 큰 차이가 있다. new 예약어를 사용하여 객체를 생성하는 경우, "abc" 문자열을 위한 메모리가 할당되고 새로운 객체가 생성된다. 하지만 String str2 = "test"; 와 같이 생성자를 이용하지 않고 바로 문자열 상수를 가리키는 경우 str2가 기존에 만들어져 있던 "test"라는 문자열 상수의 메모리 주소를 가리키게 된다. 따라서 String str3 = "test"; 코드를 작성하게 되면 str2와 str3는 같은 주소 값을 갖게 ..
java.lang 패키지 자바로 프로그램을 구현하면서 사용한 String, Integer와 같은 클래스는 java.lang 패키지에 속해 있다. String 클래스의 전체 이름은 java.lang.String이고, Integer 클래스의 전체 이름은 java.lang.Integer이다. 이와 같이 java.lang 패키지에는 기본적으로 많이 사용하는 클래스들이 포함되어 있다. 자바 프로그래밍에서 외부 패키지에 선언한 클래스를 사용할 때는 import문으로 클래스가 어느 패키지에 속해 있는지 선언해야 하는데, String 클래스를 쓰면서 import.java.lang.String.*; 문장을 작성하지 않아도 되는 이유는 무엇일까? java.lang 패키지는 컴파일할 때 import.java.lang.*; ..
인터페이스 상수 인터페이스는 추상 메서드로 이루어지므로 인스턴스를 생성할 수 없으며 멤버 변수도 사용할 수 없다. 그럼에도 위와 같이 변수를 선언해도 오류가 발생하지 않는 이유는 무엇일까? 이는 인터페이스에 선언한 변수를 컴파일하면 상수로 변환되기 때문이다. 컴파일하면 위 코드는 다음과 같이 변환된다. public static final double PI = 3.14; public static final int ERROR = -9999999; 디폴트 메서드와 정적 메서드 자바 8부터 제공되는 기능으로, 디폴트 메서드는 인터페이스에서 구현 코드까지 작성한 메서드이다. 인터페이스를 구현한 클래스에 기본적으로 제공할 메서드인 것이다. 정적 메서드는 인스턴스 생성과 상관 없이 사용할 수 있는 메서드이다. 하지만..