목록Java (47)
각진 세상에 둥근 춤을 추자
배열은 연속된 자료 구조를 구현한다. 하지만 배열은 중간에 자료를 삽입하거나 삭제할 때 나머지 자료를 이동시켜 빈 공간을 만들지 못한다. 이런 점을 개선한 자료 구조를 링크드 리스트(linked list)라고 한다. 링크드 리스트의 각 요소는 다음 요소를 가리키는 주소 값을 가진다. 따라서 물리적인 메모리는 떨어져 있어도 논리적으로 앞뒤 순서가 있을 수 있다. 만약 A → B → D 가 순차적으로 저장된 링크드 리스트가 있다고 가정한다. 리스트의 3번째 위치(B와 D사이)에 'C' 요소를 추가해 본다. 기존의 배열이라면 D를 뒤로 밀어내고 공간을 비워 그 자리에 C를 놓을 것이다. 하지만 링크드 리스트는 서로 가리키고 있는 주소 값만 변경해 주면 된다. B가 가리키던 다음 위치를 C로 변경하고, C가 가..
List 인터페이스 List 인터페이스에는 객체를 순서에 따라 저장하고 유지하는 데 필요한 메서드가 선언되어 있다. 순차 자료 구조의 대표적인 예는 배열이다. (1) ArrayList 클래스 ArrayList를 활용한 MemberArrayList 클래스를 생성한다. 클래스에는 회원을 추가하는 addMember(), 회원을 삭제하는 removeMemeber(), 전체 회원을 출력하는 showAllMember() 메서드가 있다. package collection.arraylist; import java.util.ArrayList; import collection.Member; public class MemberArrayList { // ArrayList 선언 private ArrayList arrayList..
프로그램의 기능을 효과적으로 구현하기 위하여 프로그램을 개발할 때 사용하는 자료를 어떤 구조로 관리할 것인가는 중요하다. 이때 사용하는 것을 자료 구조(data structure)라고 한다. 자료 구조는 프로그램 실행 중에 메모리에 자료를 유지, 관리하기 위해 사용한다. 자바에서는 필요한 자료 구조를 미리 구현하여 java.util 패키지에서 제공하고 있는데, 이를 컬렉션 프레임워크(collection framework)라고 한다. 컬렉션 프레임워크의 전체 구조는 Collection 인터페이스와 Map 인터페이스 기반으로 이루어져 있다. Collection 인터페이스: 하나의 자료를 모아서 관리하는 데 필요한 기능을 제공 Map 인터페이스: 쌍(pair)으로 된 자료를 관리하는 데 유용한 기능을 제공 1..
여러 참조 자료형을 사용할 수 있도록 프로그래밍하는 것을 '제네릭(Generic) 프로그래밍'이라고 한다. 제네릭에서는 여러 참조 자료형을 사용해야 하는 부분에 Object가 아닌 'T'와 같이 하나의 문자로 표현한다. 그리고 객체를 생성할 때, T 자리에 구체적인 자료형을 적는다. 즉, Box 클래스 안에 저장되는 구체적인 자료형 대신, T라는 타입 매개 변수로 표시한 것이다. 이렇게 되면 Box로 생성된 객체는 어떤 타입의 데이터든 저장할 수 있다. 제네릭 클래스(generic class)는 타입을 변수로 표시한다. 이것을 타입 매개 변수 (type parameter)라고 하는데 타입 매개 변수는 객체 생성 시에 프로그래머가 결정한다. 3D 프린터 클래스 예제를 통해 제네릭 프로그래밍을 이해해 본다...
자바의 모든 클래스와 인터페이스는 컴파일 되고 나면 class 파일로 생성된다. 예를 들어 a.java 파일이 컴파일 되면 a.class 파일이 생성되고 이 class 파일에는 클래스나 인터페이스에 대한 변수, 메서드, 생성자 등의 정보가 들어 있다. 클래스의 정보를 사용할 경우 클래스가 정확히 어떤 자료형인지 알 필요가 있다. Class 클래스를 선언하고 클래스 정보를 가져오는 방법은 다음과 같이 세 가지가 있다. // 1. Object 클래스의 getClass( ) 메서드 사용하기 String s = new String(); class c = s.getClass(); // 2. 클래스 파일 이름을 Class 변수에 직접 대입하기 Class c = String.Class; // 3. Class.forN..
이차 방정식의 근을 구하는 공식이다. 각 a,b,c의 값을 입력한 후 해당 근의 공식에 대입하여 x의 값을 구한다. package sub06; import java.util.Scanner; public class Test11 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("a값 입력: "); int a = sc.nextInt(); System.out.print("b값 입력: "); int b = sc.nextInt(); System.out.print("c값 입력: "); int c = sc.nextInt(); int x1 = (-b +(int) Math.sqrt(b*b - 4*a..
정수와 같은 기초 자료형을 객체로 포장하고 싶은 경우, 랩퍼 클래스(Wrapper Class)를 사용한다. 랩퍼 클래스는 여러 가지 유용한 메소드를 제공한다. 특히, 저장된 값을 다른 자료형으로 변환하는 메소드를 제공하기도 한다. // 객체를 매개변수로 받는 경우 public void setValue (Integer i) {...} // 반환 값이 객체인 경우 public Integer returnValue() {...} Wrapper 클래스의 종류는 다음과 같다. 기본형 Wrapper 클래스 boolean Boolean byte Byte char Character short Short int Integer long Long float Float double Double 대표적인 Integer 클래스를 ..
1. 문자 → 아스키 코드 package ch11_1; public class ASCTest { public static void main(String[] args) { String str = "ASC#2!"; for (int i=0; i
1. 문자열 → char [ ] String(문자열)을 char[] 로 변환하여 리턴한다. public char [] toCharArray() 예제 package ch11_1; public class toCharArrayTest { public static void main(String[] args) { // 문자열 String str = "ABC"; // 문자열을 char[]로 변환 char [] charArr = str.toCharArray(); // char[] 출력 for ( int i=0; i
String 클래스는 문자열을 구성하는 문자들을 내부에 저장한다. String 안에 저장된 문제에는 0부터 시작하는 번호가 매겨져 있는데 이를 인덱스(index)라고 한다. 자바 API 문서의 String 클래스에는 여러 메소드들이 있다. 자바에서 문자열을 선언하는 방법은 두 가지가 있다. (1) 생성자의 매개변수로 문자열을 생성 (원칙) String str1 = new String("abc"); (2) 문자열 상수를 가리키는 방식 (많이 사용하는 방법) String str2 = "def"; (1) length() 메소드: 문자열이 길이를 반환 // 객체 생성 String s = "Hello World!"; // 12가 반환됨 int size = s.length(); (2) charAt() 메소드: 객체..