목록Study/Java (11)
DevGang
SOLID 클린 코드로 유명한 로버트 마틴이 정리한 좋은 객체 지향 설계의 5가지 원칙 SRP(Single Responsibility Principle) : 단일 책임 원칙 OCP(Open/Closed Principle) : 개방-폐쇄 원칙 LSP(Liskov Substitution Principle) : 리스 코프 치환 원칙 ISP(Interface Segregation Principle) : 인터페이스 분리 원칙 DIP(Dependency Inversion Prinicple) : 의존관계 역전 원칙 SRP(Single Responsibility Principle) - 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에..
추상 클래스(Abstract Class) 추상 클래스는 객체화될 수 없다. (new, static - x) 추상 클래스를 상속한 클래스들의 공통 자료형이다. 캡슐 단위의 공통 기능의 집중화를 할 수 있다. (공통화 작업) 추상 메서드(Abstract Method) 공통 기능이지만 상속받는 클래스들마다 다른 기능일 경우 자식 클래스에서 구현하도록 한다. 구현을 강제할 수 있다. (에러) protected 접근 지정자는 상속받는 클래스만 사용할 수 있다. // 추상화 클래스 public abstract class Exam { private int kor; private int math; public Exam() { this(0, 0); } public Exam(int kor, int math) { this...
기본 생성자 class ExamList { private Exam[] exams; private int current; public ExamList() { exams = new Exam[3]; current = 0; } } 기본 생성자 제거 기본 생성자가 없다면, 기본 생성자는 사용할 수 없다. class ExamList { private Exam[] exams; private int current; public ExamList(int size) { exams = new Exam[size]; current = 0; } } 생성자 오버 로딩 생성자 오버 로딩 함수의 중복을 제거해서 구현한다. 항상 먼저 생성자 호출 후 새로운 값을 초기화해야 한다. class ExamList { private Exam[] ..
HashMap Map 인터페이스의 여러 구현 중 하나는 해시 테이블(hash table)에 기반을 두는데 지금까지 발명된 자료구조 중 단연 으뜸이다. 핵심 메서드(put, get)의 실행시간이 상수 시간이다. 가변 객체를 키로 사용하는 것은 위험하다. HashMap 클래스의 연산이 상수 시간이라 해도 해싱이 느릴 수 있다. 즉, 상수가 커질 수 있다. 해시 함수가 키를 고루 분배하면 잘 동작하지만 좋은 해시 함수를 설계하는 것은 쉬운 일이 아니다. 키의 중복이 많이 일어나면 성능이 나빠진다. 해시 테이블에 있는 키는 순서대로 저장되지 않는다. 순서는 테이블이 커지고 키가 재 해시될 때 변하기도 한다. TreeMap TreeMap은 해시 함수를 사용하지 않는다. 따라서 해싱 비용과 해시 함수를 고르는 것을..
정리 구분 ArrayList LinkedList add(끝) 1 1 add(시작) n 1 add(일반적으로) n n get/set 1 n indexOf/lastIndexOf n n isEmpty/size 1 1 remove(끝) 1 1 remove(시작) n 1 remove(일반적으로) n n 구현 가변 크기 배열 이중 연결 리스트 초기 용량 10 0 메모리 부담 적음 많음 자료구조 선택하기 시작이나 끝 근처에 요소를 추가/제거하는 연산은 LinkedList ArrayList 클래스의 유일한 이점은 get/set 메서드 이러한 연산이 응용 프로그램의 실행시간에 뚜렷한 영향을 미치지 않는다면, 즉 응용 프로그램이 다른 일을 하느라 대부분 시간을 소모하면 List 구현에 대한 선택은 큰 의미가 없습니다. 작..
JVM(Java Virtual Machine) 자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체다. CPU나 운영체제(플랫폼)의 종류와 무관하게 실행이 가능하다. 운영체제 위에서 동작하는 프로세스로 자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행시켜주는 역할을 한다. JVM의 구성을 살펴보면 크게 4가지(Class Loader, Execution Engine, Garbage Collector, Runtime Data Area)로 나뉜다. 1. Class Loader 자바에서 소스를 작성하면 Person.java처럼 java파일이 생성된다. java 소스를 자바 컴파일러가 컴파일하면 Person.class 같은 class파일(바이트코드)이 생성된다...
GC(Garbage Collection) JVM의 heap 영역에서 사용하지 않는 객체를 삭제하는 프로세스 Reachability 어떤 객체에 유효한 참조가 존재한다면 Reachable, 그렇지 않다면 Unreachable *GC Roots stack 영역의 데이터들 method 영역의 static 데이터들 JIN에 의해 생성된 객체들 heap 영역의 다른 객체의 참조도 reachable Mark and Sweep, Compact Mark : GC Root로부터 모든 변수를 스캔하면서 어떤 객체를 참조하고 있는지 찾아서 마킹한다. Sweep : Unreachable 객체들을 Heap에서 제거한다. Compact : Sweep 후에 분산된 객체들을 Heap의 시작 주소로 모아 메모리가 할당된 부분과 그렇지..
JCF란 Java에서 Collections란 데이터의 집합, 그룹을 의미한다. JCF는 이러한 데이터, 자료구조인 Collection과 이를 구현하는 클래스, 정의하는 인터페이스들을 제공한다. JCF 장점 코드 재사용이 쉽다. 프로그램 속도와 품질을 높일 수 있다. 관련성이 없는 API들의 상호운영성을 보장한다. 표준적인 인터페이스를 제공하면서 새로운 API를 배우는 노력을 줄여준다. 새로운 API를 직접 제작하는 노력의 낭비를 줄여준다. 프로그래밍을 쉽게 한다. JCF 종류 List - ArrayList 배열을 구현한 클래스로 논리적 순서와 물리적 순서가 동일하며 가장 많이 사용 List - LinkedList 논리적으로 순차적인 구조지만, 물리적으로는 순차적이지 않을 수 있음 Queue Queue는 ..
JDK 1.0(1991) OAK 발표: GE사의 요청으로, 선마이크로 시스템즈에서 C++의 단점을 극복하고자 만든 언어 메모리 할당/해제의 어려움과 다중 상속으로 인한 실수유발을 극복하려고 했다. 1996년, JDK 1.0 발표 : Java로 개명, Java Virtual Machine 1.0을 발표했다. Java Applet도 이때 처음 도입 JDK1.1(1997) JDBC, RMI, Reflection, JIT, Inner Class 개념이 포함 JDK 1.2(1998) Java SE 1.2, ME 1.2, EE 1.2 세 가지 버전으로 발표 - Swing이 SE에 포함, Corba IDL(이종기기간 함수 호출 스펙), Collection Framework 포함 JDK 1.3(2000) HotSpot..
제네릭이란? 제네릭은 클래스에서 사용할 타입을 클래스 외부에서 설정하는 것 제네릭 선언은 클래스 으로 합니다. 제네릭의 타입으로는 참조형 데이터 타입만 설정 가능합니다. class CustomStack { List customStack = new ArrayList(); public void pop( T inputItem ) { customStack.add( inputItem ); } } public class GenericEx_1 { public static void main(String[] args) { CustomStack stringStack = new CustomStack(); CustomStack integerStack = new CustomStack(); stringStack.pop( "홍길동..