연결 리스트 (LinkedList) 구현 LinkedList 특징 동일한 데이터 타입을 순서에 따라 관리하는 자료 구조 자료를 저장하는 노드에는 자료와 다음 요소를 가리키는 링크(포인터)가 있음 자료가 추가 될때 노드 만큼의 메모리를 할당 받고 이전 노드의 링크로 연결함 (정해진 크기가 없음) 연결 리스트의 i 번째 요소를 찾는게 걸리는 시간은 요소의 개수에 비례 : O(n) jdk 클래스 : LinkedList LinkedList 구현하기 MyListNode.java public class MyListNode { private String data; // 자료 public MyListNode next; // 다음 노드를 가리키는 링크 public MyListNode(){ data = null; next = null; } public MyLis..
배열(Array) 구현 Array의 특징 동일한 데이터 타입을 순서에 따라 관리하는 자료 구조 정해진 크기가 있음 요소의 추가와 제거시 다른 요소들의 이동이 필요함 배열의 i 번째 요소를 찾는 인덱스 연산이 빠름 jdk 클래스 : ArrayList, Vector Array 구현하기 MyArray.java public class MyArray { int[] intArr; //int array int count; //개수 public int ARRAY_SIZE; public static final int ERROR_NUM = -999999999; public MyArray() { count = 0; ARRAY_SIZE = 10; intArr = new int[ARRAY_SIZE]; } public MyArray(int size) ..
썸네일 여러가지 자료구조 자료구조란 무엇인가? (Data Structure) 프로그램에서 사용할 많은 데이타를 메모리 상에서 관리하는 여러 구현방법들 효율적인 자료구조가 성능 좋은 알고리즘의 기반이 됨 자료의 효율적인 관리는 프로그램의 수행속도와 밀접한 관련이 있음 여러 자료 구조 중에서 구현하려는 프로그램에 맞는 최적의 자료구조를 활용해야 하므로 자료구조에 대한 이해가 중요함 자료구조에는 어떤 것들이 있나? 한 줄로 자료를 관리하기 (선형 자료구조) 배열 (Array) : 선형으로 자료를 관리, 정해진 크기의 메모리를 먼저 할당받아 사용하고, 자료의 물리적 위치와 논리적 위치가 같음 연결 리스트 (LinkedList) : 선형으로 자료를 관리, 자료가 추가될 때마다 메모리를 할당 받고, 자료는 링크로 연결됨. 자료의 물리적 위..
썸네일 여러 인터페이스 구현하기, 인터페이스의 상속 여러 인터페이스 구현 자바의 인터페이스는 구현 코드가 없으므로 하나의 클래스가 여러 인터페이스는 구현 할 수 있음 디폴트 메서드가 중복 되는 경우는 구현 하는 클래스에서 재정의 하여야 함 여러 인터페이스를 구현한 클래스는 인터페이스 타입으로 형 변환 되는 경우 해당 인터페이스에 선언된 메서드만 사용 가능 함 Sell.java public interface Sell { void sell(); } Buy.java public interface Buy { void buy(); } Customer.java public class Customer implements Buy, Sell{ @Override public void sell() { System.out.println("customer sell"); } @O..
인터페이스의 여러가지 요소 상수 모든 변수는 상수로 변환 됨 public static final double PI = 3.14; int ERROR = -999999999; 추상 메서드 모든 선언된 메서드는 추상 메서드 public abstract 디폴트 메서드 (자바 8이후) 구현을 가지는 메서드, 인터페이스를 구현하는 클래스들에서 공통으로 사용할 수 있는 기본 메서드 default 키워드 사용 default void description() { System.out.println("정수 계산기를 구현합니다."); myMethod(); } 인터페이스를 구현한 클래스의 인스턴스가 생성 되어야 사용 가능함 정적 메서드 (자바 8이후) 인스턴스 생성과 상관 없이 인터페이스 타입으로 사용할 수 있는 메서드 static int total(i..
썸네일 인터페이스를 활용한 다형성 구현 (dao 구현하기) 인터페이스와 다형성 하나의 인터페이스를 여러 객체가 구현하게 되면 클라이언트 프로그램은 인터페이스의 메서드를 활용하여 여러 객체의 구현을 사용할 수 있음 ( 다형성) 여러가지 예 인터페이스를 활용한 dao 구현하기 DB에 회원 정보를 넣는 dao(data access object)를 여러 DB 제품이 지원될 수 있게 구현함 환경파일(db.properties) 에서 database의 종류에 대한 정보를 읽고 그 정보에 맞게 dao 인스턴스를 생성하여 실행될 수 있게 함 source hierachy UserInfo.java (사용자 정보 클래스) public class UserInfo { private String userId; private String passwd; private String userNa..
인터페이스는 왜 쓰는가? 인터페이스가 하는 일 클래스나 프로그램이 제공하는 기능을 명시적으로 선언 일종의 클라이언트 코드와의 약속이며 클래스나 프로그램이 제공하는 명세(specification) 클라이언트 프로그램은 인터페이스에 선언된 메서드 명세만 보고 이를 구현한 클래스를 사용할 수 있음 어떤 객체가 하나의 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메서드를 구현했다는 의미임 인터페이스를 구현한 다양한 객체를 사용함 - 다형성 예) JDBC 인터페이스
썸네일 인터페이스(interface) 인터페이스란? 모든 메서드가 추상 메서드로 선언됨 public abstract 모든 변수는 상수로 선언됨 public static final [public] interface 인터페이스 이름{ public static final float pi = 3.14F; public void makeSomething(); } 자바 8 부터 디폴트 메서드(default method)와 정적 메서드(static method) 기능의 제공으로 일부 구현 코드가 있음 인터페이스 작성 문법 인터페이스 이름은 Upper CamelCase로 작성된다. interface도 확장자가 .java로 작성된다. 인터페이스 정의와 구현 Calc.java public interface Calc { double PI = 3.14; int E..
다운 캐스팅과 instanceof 다운 캐스팅(downcasting) 업캐스팅된 클래스를 다시 원래의 타입으로 형 변환 하위 클래스로의 형 변환은 명시적으로 해야 함 Customer vc = new VIPCustomer(); //묵시적 VIPCustomer vCustomer = (VIPCustomer)vc; //명시적 instanceof를 이용하여 인스턴스의 형 체크 원래 인스턴스의 형이 맞는지 여부를 체크하는 키워드 맞으면 true 아니면 false를 반환 함 AnimalTest.java public void testDownCasting(ArrayList list) { for(int i =0; i
상속은 언제 사용 할까? IS-A 관계(is a relationship : inheritance) 일반적인(general) 개념과 구체적인(specific) 개념과의 관계 상위 클래스 : 하위 클래스보다 일반적인 개념 ( 예: Employee ) 하위 클래스 : 상위 클래스보다 구체적인 개념들이 더해짐 ( 예: Engineer, Manager...) 상속은 클래스간의 결합도가 높은 설계 상위 클래스의 수정이 많은 하위 클래스에 영향을 미칠 수 있음 계층구조가 복잡하거나 hierarchy가 높으면 좋지 않음 HAS-A 관계(composition) 클래스가 다른 클래스를 포함하는 관계 ( 변수로 선언 ) 코드 재사용의 가장 일반적인 방법 Student가 Subject를 포함하는 Library를 구현할 때 ArrayList 생성하여 ..
썸네일 다형성과 다형성을 사용하는 이유 다형성(polymorphism) 이란? 하나의 코드가 여러 자료형으로 구현되어 실행되는 것 같은 코드에서 여러 다른 실행 결과가 나옴 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나임 다형성을 잘 활용하면 유연하고 확장성있고, 유지보수가 편리한 프로그램을 만들수 있음 다형성의 예 class Animal{ public void move() { System.out.println("동물이 움직입니다."); } public void eating() { System.out.println("먹이를 먹습니다."); } } class Human extends Animal{ public void move() { System.out.println("사람이 두발로 걷습니다."); } public voi..
썸네일 메서드 재정의와 가상 메서드 원리 메서드는 어떻게 호출되고 실행 되는가? 메서드(함수)의 이름은 주소값을 나타냄 메서드는 명령어의 set 이고 프로그램이 로드되면 메서드 영역(코드 영역)에 명령어 set이 위치 해당 메서드가 호출 되면 명령어 set 이 있는 주소를 찾아 명령어가 실행됨 이때 메서드에서 사용하는 변수들은 스택 메모리에 위치 하게됨 따라서 다른 인스턴스라도 같은 메서드의 코드는 같으므로 같은 메서드가 호출됨 인스턴스가 생성되면 변수는 힙 메모리에 따로 생성되지만, 메서드 명령어 set은 처음 한번만 로드 됨 public class TestMethod { int num; void aaa() { System.out.println("aaa() 호출"); } public static void main(String[] args) {..