Programming
JAVA Basic) 컬렉션 프레임워크
목차 흔히 프로그래밍을 건축에 비유를 한다. 원하는 건물을 지으려면 구조를 잘 잡아야하듯, 프로그램 개발도 사용하는 자료를 어떤 구조로 관리할 것인지가 중요하기 때문이다. 그래야 프로그램의 기능을 효과적으로 구현할 수 있기 때문! 이때 사용하는 것이 '자료 구조(data structure)' '자료 구조'는 프로그램 실행 중 메모리에 자료를 유지·관리하기 위해 사용한다. 자바에서는 필요한 자료 구조를 미리 구현하여 java.util 패키지에 제공하고 있는데, 이를 '컬렉션 프레임워크(collection framework)'라고 한다. 자료 구조는 개발자가 필요할 때 직접 만들어 사용할 수도 있다. 하지만 자바 '컬렉션 프레임워크'를 사용하면 직접 개발하는 수고를 덜 수 있을 뿐만 아니라 잘 만들어진 자료..
JAVA Basic) 제네릭(Generic)
목차 프로그램에서 변수를 선언할 때, 메서드에서 매개 변수를 사용할 때도 모든 변수는 자료형이 있다. 대부분은 하나의 자료형으로 구현하지만, 변수나 메서드의 자료형을 필요에 따라 여러 자료형으로 바꿀 수 있다면 프로그램이 훨씬 더 유연해질 것이다. 이처럼 어떤 값이 하나의 참조 자료형이 아닌 여러 참조 자료형을 사용할 수 있도록 프로그래밍하는 것을 '제네릭(Generic)프로그래밍'이라고 한다. '제네릭 프로그램'은 참조 자료형이 변환될 때 컴파일러가 검증을 해 꽤 안정적이다. '컬렉션 프레임워크'의 많은 부분이 이 '제네릭'으로 구현되어있다. 예제로 제네릭에 대해 이해해보자. 3D프린터는 재료를 가지고 입체 모형을 만드는 일을 한다. 재료는 파우더나 플라스틱을 사용한다. 먼저 파우더를 재료로 쓰는 3D..
JAVA Basic) 자료 구조
책에는 정리되어있지 않지만, 컬렉션 프레임워크에 들어가기 전에 알아두면 좋을 내용. 목차 프로그래밍에서 데이터를 구조적으로 표현하는 방식과 이를 구현하는 데 필요한 알고리즘에 대해 논하는 기초이론, 혹은 과목. 컴퓨터과학에서 알고리즘과 함께 가장 중요한 기초이론. 같은 형의 데이터 타입을 메모리에 저장하는 선형적 자료구조. 논리적 구조와 물리적 구조가 동일하다. 배열의 특징 fixed length : 배열의 길이가 정해져 있음. 인덱스(index)연산 : 배열의 길이가 정해져 있기 때문에 요소를 찾기 수월함. in/out, insert/delete가 n개(요소의 개수)에 종속 : 연산의 횟수가 n개(요소의 개수)에 종속되어있다. JDK ArrayList : 알고리즘에 최적화 Vector : 자바 1.2부..
JAVA Basic) 기본 클래스 - 연습문제
목차 Q1. 두 개의 인스턴스가 메모리는 다르더라도 논리적으로 동일하다는 것을 구현하는 Object의 메서드는 [ ]입니다. Q2. String 클래스는 멤버로 가지는 문자열 변수가 final이어서 변하지 않는다. 다음과 같이 두 개의 String 변수를 연결할 때 힙 메모리에 생성되는 String 인스턴스를 그려보자. Stirng a = new String("abc"); String d = new String("def"); String a = a+d; Q3. 기본 자료형을 멤버 변수로 포함하여 메서드를 제공함으로써 기본 자료형의 객체를 제공하는 클래스를 [ ]라고 한다. Q4. 다음 코드의 출력결과가 '진돗개 멍멍이'가 되도록 MyDog 클래스를 수정해보자. class MyDog { String nam..
JAVA Basic) Class 클래스
목차 자바의 모든 클래스와 인터페이스는 컴파일되고 나면 class파일로 생성된다. 예를 들어 a.java 파일이 컴파일 되면 a.class파일이 생성되고. 이 class파일에는 클래스나 인터페이스에 대한 변수, 메서드, 생성자 등 정보가 들어있다. 'Class 클래스'는 컴파일 된 class 파일에 저장된 클래스나 인터페이스 정보를 가져오는데 사용된다. 지금까지 변수를 선언할 때 자료형을 미리 파악하고 그 자료형에 따라 변수를 선언했다. 그리고 클래스를 사용할 때도 이미 그 클래스 정보(메서드, 변수 등)를 알고 있는 상황에서 프로그램을 만들었다. 그런데 어떤 경우에는 여러 클래스 중에 상황에 따라 다른 클래스를 사용해야 할 때도 있고, 반환받는 클래스가 정확히 어떤 자료형인지 모를 때도 있다. 이렇게 ..
JAVA Basic) 기본 클래스
목차 지금까지 String, Integer와 같은 클래스를 자료형으로 불러와 사용했다. 이러한 클래스들은 'java.lang 패키지'에 속해있다. String 클래스의 전체 이름은 java.lang.String이고, Integer 클래스는 java.lang.Integer이다. 이처럼 java.lang 패키지에는 기본적으로 많이 사용하는 클래스들이 포함되어 있다. 자바가 설치된 경로에 있는 src.zip(자바 소스 코드 압축 파일)의 압축을 풀면 src폴더가 나타나는데, 이 폴더 하위의 [ java.base\java\lang ]에 들어가면 java.lang 패키지에서 제공하는 여러 소스 코드를 확인할 수 있다. 자바 프로그래밍에서 외부 패키지에 선언한 클래스를 사용할 때는 기본적으로 import문으로 클래..
JAVA Basic) 인터페이스 - 연습 문제
목차 Q1 클래스가 인터페이스를 구현하기 위해 사용하는 예약어는 [ ]이다. Q2 클래스가 인터페이스를 구현할 때 인터페이스에 선언한 메서드를 모두 구현하지 않으면 그 클래스는 [ ]가 된다. Q3 인터페이스에 선언한 변수는 컴파일할 때 [ ]로 변환된다. Q4 한 인터페이스를 여러 클래스가 다양한 방식으로 구현한 경우에 프로그램에서 인터페이스에 선언된 메서드를 사용할 때 각 클래스의 구현 내용과 상관없이 도잉ㄹ한 방식으로 사용할 수 있다. 이렇게 같은 코드가 여러 구현 내용으로 실행되는 객체 지향 특성을 [ ]이라고 한다. Q5 인터페이스에서 구현한 코드를 제공하는 메서드는 [ ] 와 [ ]이다. Q6 한 클래스에서 여러 인터페이스를 구현할 수 있다. [ 예 / 아니오 ] Q7 숫자 정렬 알고리즘에는 ..
JAVA Basic) 인터페이스 활용
목차 한 클래스가 여러 클래스를 상속받으면 메서드 호출이 모호해지는 문제가 발생할 수 있다. 하지만 인터페이스는 한 클래스가 여러 인터페이스를 구현할 수 있다. package interfaceex; public interface Buy { void buy(); } package interfaceex; public interface Sell { void sell(); } 그림을 보면 Customer클래스는 Buy와 Sell 두 인터페이스를 구현하고 있다. Buy인터페이스에 추상 메서드 buy()가 선언. Sell인터페이스에 추상메서드 sell()이 선언. package interfaceex; public class Customer implements Buy, Sell{ // Customer클래스는 Buy와..
JAVA Basic) 인터페이스 요소
목차 인터페이스는 추상 메서드로 이루어지므로 인스턴스를 생성할 수 없으며 멤버 변수도 사용할 수 없다. 근데 인터페이스에 아래 코드와 같이 변수를 선언해도 오류는 발생하지 않는다. public interface Calc{ double PI = 3.14; int ERROR = -99999999; ... } 이 이유는 인터페이스에 선언한 변수를 컴파일 하면 상수로 변환되기 때문이다. Calc 인터페이스에 선언한 변수 PI를 컴파일 하면 상수 3.14, int형 변수 ERROR역시 -9999999~로 변환되어 상수로 취급된다. public static final double PI = 3.14; public static final int ERROR = -999999999; ... 자바 7까지는 인터페이스에서 추..
JAVA Basic) 인터페이스와 다형성
목차 '인터페이스(interface)'는 어디에 쓰이는 코드일까? 자바 8에서 새롭게 추가된 '디폴트 메서드'와 '정적 메서드 구현부(implementation part)'가 없다면 인터페이스는 그야말로 껍데기이다. 그렇다면 '메서드 선언부(declaration part)'만 있는 인터페이스는 대체 왜 쓰는지 살펴보자. 인터페이스는 클라이언트 프로그램에 어떤 메서드를 제공하는 지 알려주는 '명세(specification)'또는 약속의 역할을 한다. 예를 들면, Abc인터페이스를 구현한 A클래스가 있다. 이 클래스를 사용하는 Z프로그램이 있다고 가정. Abc인터페이스에는 구현할 추상 메서드가 모두 선언되어 있고, 어떤 매개변수가 사용되는지, 어떤 자료형 값이 반환되는지 선언되어있다. Z 프로그램에서 A클래..
JAVA Basic) 인터페이스(interface)
목차 구현 코드가 없는 인터페이스 인터페이스(interface)는 클래스 혹은 프로그램이 제공하는 기능을 명시적 선언하는 역할. 추상 메서드와 상수로만 이루어짐. 구현된 코드가 없어서 당연히 인스턴스를 생성할 수 없다. 이러한 인터페이스는 어떻게 사용되어지는지 간단한 계산기를 만들어보자. - calc 인터페이스 package interfaceex; public interface Calc { double PI = 3.14; int ERROR = -999999999; // 멤버변수는 public static final(상수)로 자동 선언됨 int add(int num1, int num2); int substract(int num1, int num2); int times(int num1, int num2); ..
JAVA Basic) 추상 클래스 - 문제 풀이
목차 Q1 클래스를 구현할 때 메서드 몸체를 구현하지 않고 선언만 하는 메서드를 [ ]라고 하고, 이를 포함한 클래스를 [ ]라고 한다. Q2 상수를 선언할 때 상속받은 클래스에서 메서드를 재정의하지 못하도록 사용하는 예약어는 [ ]이다. Q3 추상 클래스나 추상 메서드를 선언할 때 사용하는 예약어는 [ ]이다. Q4 로직 흐름을 정의한 메서드이며 메서드 내부에서 일반 메서드나 구현되지 않은 추상 메서드를 호출. 흐름이 변하지 않도록 하위 클래스에서 재정의하지 못하게 final로 선언하는 메서드를 [ ]라고 한다. Q5 Car 추상 클래스를 상속받는 Sonata, Avante, Gradeur, Genesis 클래스가 있다. 각 차는 주행하기 위해 다음 순서로 움직인다. run(){ strat(); dri..