본문 바로가기

Java

(41)
[Java] 애너테이션(Annotation) 자바를 개발한 사람들은 소스코드에 대한 문서를 따로 만들기보다 소스코드과 문서를 하나의 파일로 관리하는 것이 낫다고 생각했다. 그래서 소스코드의 주석'/** ~ */'에 정보를 저장하고, 주석으로부터 HTML문서를 생성해내는 프로그램(javadoc.exe)을 만들어서 사용했다. (메타 데이터) 소스코드에서 비즈니스 로직에는 영향을 주지는 않지만 해당 타겟의 연결 방법이나 소스코드의 구조를 변경할 수 있다. 용도 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보 제공 SW 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공 런타임시 특정 기능을 실행하도록 정보를 제공
[Java] 지네릭스(Generics) 컴파일 시간에 더 많은 버그를 감지할 수 있도록 하여 코드에 안정성을 추가한다. 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크(compile-time type check)를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다. 장점 컴파일에서 더 강력한 유형 검사 케스트 제거 프로그래머가 일반 알고리즘을 구현할 수 있도록 지원 제한 제네릭 형식의 변수는 참조 타입(Reference Types)만 인스턴스를 생성할 수 있다. 기본 타입(Primitive Types) 생성 불가 참조 : Object는 사용 가능한 가장 일반적인 유형이고 기본 유형으로 확장되지 않기 때문에 제네릭이 참조 유형에 대해서만 작동할 수 ..
[Java/OOP] SOLID 원칙 1. SRP 단일 책임의 원칙 - Single responsibility principle 한 클래스는 하나의 책임만 가져야 한다. 변경을 기준으로 한다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다. 2. OCP 개방-폐쇄 원칙 - Open/closed principle 소프트웨어 요소는 확장에는 열려 있으나, 수정에는 닫혀있다. 다형성을 활용해보자 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현한다. 문제점 구현 객체를 변경하려면 클라이언트 코드를 변경해야한다. 분명 다형성을 사용했지만 OCP원칙을 지킬 수 없다. 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다. 3. LSP 리스코프 치환 원칙 - Liskov substitution..
[Java] 인터페이스 vs 추상클래스 1. 추상클래스란? 추상 메서드를 선언하여 상속을 통해서 자손 클래스에게 완성하도록 유도하는 클래스이다. 미완성 설계도라고 표현을 하며, 상속을 위한 클래스이기 때문에 객체를 생성할 수 없다. class 앞에 abstract 예약어를 사용하여 상속을 통해서 구현해야한다. 2. 인터페이스란? 인터페이스는 기본 설계도라고 할 수 있다. 다른 클래스를 작성하는데 도움을 주는 목적이고 추상클래스와 다르게 다중상속(구현)이 가능하다. 3. 공통점, 차이점 3.1공통점 추상메서드를 사용할 수 있다. 3.2 차이점 1) 사용의도 추상클래스는 IS - A "~이다" 인터페이스는 HAS - A "~을 할 수 있는" 다중상속의 가능 여부에 따라 용도 구분 2) 공통된 기능 사용 여부 모든 클래스를 인터페이스를 사용해서 기..
[Java] OpenJDK 1. JDK (Java Development Kit)의 종류와 성격 Java 자체는 무료 언어이며 이를 실행할 수 있는 환경으로 만들어주는 JRE(Java Runtime Environment)에 개발 및 기타도구들이 포함된 것이 JDK이다. 따라서 Java로 구현된 class파일들을 단순히 실행만 할 것이라면 JRE만 있으면 되며 개발까지 하려면 JDK가 필요하게 된다. JCP(JAva Community Process) 라는 곳에서 Java 플랫폼에 추가될 기술 및 표준을 정의하고 이를 기준으로 생성되는 것이 OpenJDK이며 이것을 기반으로 추가적으로 보안이슈를 수정하거나 기능을 추가하여 각 단체 또는 회사에서 자기들만의 JDK버전을 배포하게 되는데, Oracle JDK도 이중의 하나인 것이다. Fre..
[Java] BigInteger, BigDecimal 클래스 1. BigInteger 정수형으로 표현할 수 있는 값의 한계가 있다. 가장 큰 정수형 타입인 long으로 표현할 수 있는 값은 10진수 19자리 정도이다. 이 값 보다 더 큰 값을 다뤄야 할 때 사용하면 좋은 것이 BigInteger이다. 내부적으로 int배열을 사용해서 값을 다룬다. 그래서 long타입보다 훨씬 큰 값을 다룰 수 있지만 성능은 떨어진다. docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html BigInteger (Java Platform SE 7 ) Immutable arbitrary-precision integers. All operations behave as if BigIntegers were represented in two'..
[Java] StringTokenizer 클래스 긴 문자열을 지정된 구분자(delimiter)를 기준으로 토큰(token)이라는 여러 개의 문자열로 잘라내는 데 사용된다. 예를 들어 "100,20,300,400"라는 문자열이 있을 때 ','를 구분자로 잘라내면 "100","200","300","400"이라는 4개의 문자열(토큰)을 얻을 수 있다. 물론 String의 split(String regex), Scanner의 useDelimiter(String pattern)를 사용할 수도 있다. 이 두가지 방법은 정규식 표현(Regular expression)을 사용해야하므로 정규식 표현에 익숙하지 않은 경우 StirngTokenizer를 사용하는 것이 간단하면서도 명확한 결과를 얻을 수 있을 것이다. docs.oracle.com/javase/7/docs/..
[Java] 래퍼(Wrapper) 클래스, 정규식(Regular Expression) 자바의 자료형은 크게 기본 타입(primitive type)과 참조 타입(reference type)으로 나누어진다. 기본 타입은 char, int ,float, double 등이 있고 참조 타입은 class, interface 등이 있다. 프로그래밍을 하다 보면 기본 타입의 데이터를 객체로 다뤄야 하는 경우가 있다. 이 때 사용되는 것이 래퍼(wrapper)클래스이다. 자바는 모든 기본타입(primitive type)은 값을 갖는 객체를 생성할 수 있다. - 오토박싱(AutoBoxing)&언박싱(Unboxing) 기본 타입의 값을 포장 객체로 만드는 과정을 박싱이라고 하고 반대로 포장객체에서 기본타입의 값을 얻어내는 과정을 언박싱이라고 한다. 기본타입 값을 직접 박싱, 언박싱하지 않아도 자동적으로 박싱..