본문 바로가기

Java

(45)
[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) 기본 타입의 값을 포장 객체로 만드는 과정을 박싱이라고 하고 반대로 포장객체에서 기본타입의 값을 얻어내는 과정을 언박싱이라고 한다. 기본타입 값을 직접 박싱, 언박싱하지 않아도 자동적으로 박싱..
[Java] 날짜와 시간 & 형식화 1. 날짜와 시간 1.1 Calendar와 Date JDK 1.8부터 'java.time패키지'로 기존의 단점들을 개선한 새로운 클래스들이 추가되었다. - Calendar와 GregorianCalendar * Calendar를 상속받아 완전히 구현한 클래스로는 GregorianCalendar(오늘날 전세계 공통으로 사용하고 있는 그레고리력에 맞게 구현한 것)와 BuddhistCalendar가 있는데, getInstance()는 시스템의 국가와 지역설정을 확인해서 태국인 경우에는 BuddhistCalendar의 인스턴스를 반환하고, 그 외에는 GregorianCalendar의 인스턴스를 반환한다. - Date와 Calendar간의 변환 Calendar가 새로 추가되면서 Date는 대부분의 메서드가 'dep..
[Java] java.lang패키지와 유용한 클래스1 1. java.lang패키지 1.1 Object클래스 모든 클래스의 최고 조상이기 떄문에 Object클래스의 멤버들은 모든 클래스에서 바로 사용 가능하다. 1) protected Object clone() - 객체 자신의 복사본을 반환한다. - Object클래스에 정의된 clone()은 단순히 인스턴스변수의 값만을 복사하기 때문에 참조변수 타입의 인스턴스 변수가 정의되어 있는 클래스는 완전한 인스턴스 복제가 이루어 지지 않는다. ex. 배열의 경우, 복제된 인스턴스도 같은 배열의 주소를 갖기 때문에 복제된 인스턴스의 작업이 원래의 인스턴스에 영향을 미치게 된다. 이런 경우 clone메서드를 오버라이딩해서 새로운 배열의 내용을 복사하도록 해야한다. 2) public boolean equals(Obecjt ..