[Java 자료구조] 여러가지 자료 구조 (2)
·
Java & Kotlin
비선형 자료구조 트리 (Tree) 부모 노드와 자식 노드간의 연결로 이루어진 자료구조를 말한다. 트리 중에서도 프로그래밍에서 가장 많이 사용되는 트리는 이진트리이다. (자식 노드 개수 == 자식 노드 값 min heap : 부모 노드 값
[Java 자료구조] 여러가지 자료구조 (1)
·
Java & Kotlin
자료구조 프로그램에서 사용할 많은 데이터를 메모리 상에서 관리하는 여러 방법들 자료 종류에 따라 자료구조를 결정하고 알고리즘(로직)을 구현한다. 효율적인 자료구조가 성능 좋은 알고리즘의 기반이 된다. 자료의 효율적인 관리는 프로그램의 수행속도와 밀접한 관련이 있다. 자료구조의 종류 선형 자료구조 (한 줄로 자료 관리) : 전 요소와 후 요소가 1:1의 관계를 맺는 자료구조를 말한다. 배열 (Array) 가장 큰 특징은 중간이 비면 안된다는 것이다. 정해진 크기의 메모리를 먼저 할당 받아 사용한다. 물리적 위치와 논리적 위치가 같다. 어느 위치에 있는 요소를 꺼내오는 것이 빠르다는 장점이 있다. 시작 주소에서 떨어져 있는 거리를 계산하여 요소를 찾는다. O(1) 추가, 삭제 시 배열의 개수만큼 이동이 발생..
[Java 클래스] Class 클래스
·
Java & Kotlin
Class 클래스 자바의 인터페이스나 클래스를 컴파일하면 .class 파일이 생성된다. Class 클래스는 컴파일 된 .class 파일을 로드하여 객체를 동적 로드하고, 클래스에 대한 정보 등을 가져오는 메서드를 제공한다. Class.forName(String className) : 매개변수로 들어가는 클래스나 인터페이스에 대해 동적 바인딩을 해준다. (실행 중에 필요한 클래스를 로딩) Class c = Class.forName("java.lang.String"); 클래스 이름으로 직접 Class 가져오기 Class c = String.class; 생성된 인스턴스에서 클래스 가져오기 String s = new String(); Class c = s.getClass(); 동적 로딩 일반적으로 자바에서 프로..
[Java 클래스] 자바의 문자열 관련 클래스
·
Java & Kotlin
String 클래스 String 선언 String str1 = new String("abc");// 힙 메모리에 객체 생성 String str2 = "abc";// 상수 pool에 문자열 저장 힙메모리에 인스턴스로 생성되는 경우와 상수 풀에 있는 주소를 참조하는 두가지 방법이 있다. 인스턴스는 생성될 때마다 다른 주소값을 가지지만, 상수풀의 문자열은 모두 같은 주소값을 가진다. StringTest.java System.identityHashCode() 메서드는 객체의 고유한 해쉬 코드 리턴 Object 클래스의 hashCode() 메서드 또한 해쉬 코드를 리턴하지만 오버라이딩이 가능하다. String을 연결하면 기존의 String에 연결되는 것이 아닌 메모리를 새로 할당받아 새로운 문자열이 생성된다. 기..
[Java 클래스] Object 클래스의 메서드 활용
·
Java & Kotlin
equals() 메서드 두개의 인스턴스가 같다는 것은 물리적으로 힙 메모리에 저장된 위치가 같다는 것을 의미한다. (주소값 일치) == 기호와 equals() 메서드는 두 인스턴스의 주소값을 비교하여 true/false를 반환한다. 물리적으로 다르지만 논리적으로 같다고 할 수 있는 경우가 많이 있다. e.g. 같은 학번, 사번, id ... equals() 메서드를 재정의해서 두 인스턴스가 논리적으로 동일하다는 조건을 설정할 수 있다. hashCode() 메서드 hashCode()는 인스턴스의 저장 주소를 이용해 객체를 식별하는 고유한 정수값인 해쉬 코드를 반환한다. 자바에서 JVM은 hash 방식으로 인스턴스를 저장하여 힙 메모리를 관리한다. 자료의 특정 값(key 값)에 대한 저장 위치를 반환해주는 ..
[Java 클래스] Object 클래스
·
Java & Kotlin
java.lang 패키지 String, Integer, System ... 등의 기본 클래스가 포함된다. import java.lang.* 해주지 않아도 자동으로 import 되는 패키지 Object 클래스 java.lang.Object 클래스 모든 클래스의 최상위 클래스이다 ( = 모든 클래스는 Object 클래스를 상속받는다.) 모든 클래스는 Object에 정의된 메서드를 사용할 수 있고 일부는 필요에 의해 재정의 할 수 있다. 재정의 할 수 없는 메서드는 final로 선언되어 있다. 컴파일러가 자동으로 extends Object를 추가해준다. toString 메서드 객체의 정보를 String으로 바꾸어 사용할 때 쓰인다. 예시) 참조 변수를 String으로 바꾸어 참조 값(e.g. ch03.Stud..
[Java 객체지향] 인터페이스 구현 예제 프로그램 (상담원 연결 구현)
·
Java & Kotlin
고객 센터에 전화 상담을 하는 상담원들이 있다. 고객에게 전화가 오면 대기열에 저장해놓고 각 상담원에게 배분된다. 배분 정책 1) 들어오는 상담 전화를 대기열에 순서대로 저장해 놓고 상담원에게 순서대로 배분한다. 2) 쉬고 있거나 할당된 통화 수가 가장 적은 상담원에게 배분한다. 3) 등급이 높은 고객의 전화를 업무능력이 우수한 상담원에게 배분한다. 클래스 다이어그램 Scheduler.java package scheduler; public interface Scheduler { void getNextCall();// 고객의 전화를 가져옴 void sendCallToAgent();// 상담원에게 배분 } LeastJob.java package scheduler; public class LeastJob im..
[Java 객체지향] 추상 클래스와 템플릿 메서드 활용 예제 프로그램 (GameLevel 구현)
·
Java & Kotlin
Player가 있고, Player는 GameLevel 속성을 가진다. 각 GameLevel 단계 마다 run(), jump(), turn() 세가지 기능이 업그레이드 된다. Beginner : run()만 가능 Super : run(), jump() 가능 Advanced : run(), jump(), turn() 가능 Player는 한번에 하나의 레벨 상태만을 가질 수 있다. Player가 play() 중에 레벨에 있는 go(int count)라는 메서드를 호출하면 run(), 횟수만큼 jump(), turn() 한다. 클래스 다이어그램 PlayerLevel는 abstract class로 선언한다. go(int) 메서드는 템플릿 메서드로 구현하여 다른 클래스에서 순서를 변경할 수 없도록 한다. 각 레벨의..
[Java 객체지향] 여러 개의 인터페이스 구현, 인터페이스 간 상속
·
Java & Kotlin
자바에서 다중 상속을 허용하지 않는 이유 자바에서 다중 상속을 하지 않는 이유는 모호성을 제거하기 위해서이다. 다중 상속의 장점은 한 클래스가 가질 수 있는 기능이 풍부해질 수 있다는 점이다. 반면 다중 상속을 하게 되면 최상위 클래스에서 정의한 메서드를 여러 상위 클래스에서 오버라이딩하게 되면 하위 클래스가 어떤 메서드를 사용해야 할 지 모호해 진다. 이러한 문제를 diamond problem 이라고 한다. 여러 개의 인터페이스 구현 클래스 간 다중 상속은 불가능하지만 하나의 클래스가 여러 인터페이스를 구현할 수 있다. 인터페이스에 구현 코드가 없어 모호하지 않기 때문이다. 디폴트 메서드가 인터페이스 간에 중복되는 경우에는 구현하는 클래스에서 재정의해주거나 한 인터페이스의 디폴트 메서드를 선택해서 사용..