개발
-
[Wrapper, Number 클래스] int와 Integer의 차이개발/Java 2021. 1. 10. 14:37
자바에서 int와 Integer의 차이는 뭘까? 자바에서 Collection 타입을 사용할 때 항상 int 타입이 아닌, Integer 타입으로 정의한다. 다음과 같이 ArrayList가 있을 때, add()에는 int 타입을 파라미터로 준다. List answer = new ArrayList(); answer.add(1); Integer로 정의하고 그냥 int값을 넣어도 될거면, 도대체 왜 이 둘을 구분하는 것일까? 뭐가 다를까? The Numbers Classes Number 클래스는 java.lang 패키지에 있는 추상 클래스이다. 그리고 Integer는 Number를 상속받아 구현한 서브 클래스다. Integer를 비롯한 Byte, Short, Double, Float, Long 클래스들은 동명의..
-
[live-study] 8: 인터페이스개발/Java 2021. 1. 9. 10:45
목표 자바의 인터페이스에 대해 학습하세요. 학습할 것 (필수) 인터페이스 정의하는 방법 인터페이스 구현하는 방법 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 인터페이스 상속 인터페이스의 기본 메소드 (Default Method), 자바 8 인터페이스의 static 메소드, 자바 8 인터페이스의 private 메소드, 자바 9 인터페이스란 인터페이스란 객체가 할 일을 정의해놓은 타입이다. 구현 코드(객체를 사용하는 코드)와 객체 사이에 위치해서 서로 통신하도록 다리 역할을 한다. 다리 역할을 해줌으로서 교환성이 높아지고, 곧 다형성의 구현을 의미한다. 모든 기능을 추상적으로 정의하여 설계도처럼 사용한다. 자바8 부터 static 메소드나 default 메소드로 추상화가 아닌 구현도 가능해졌다. 자바8..
-
[live-study] 7: 패키지개발/Java 2021. 1. 8. 20:33
목표 자바의 패키지에 대해 학습하세요. 학습할 것 (필수) package 키워드 import 키워드 클래스패스 CLASSPATH 환경변수 -classpath 옵션 접근지시자 package 키워드 패키지란? 특징 패키지란 하나의 디렉토리와 같은 것이다. 패키지명은 파일 구조와 동일해야 한다. 서로 관련 타입들을 그룹화하고 네임스페이스를 정의한다. 패키지와 타입(class, interface, enum..)의 이름을 합쳐야 FQCN(Fully Qualified Class Name)이 된다. 예를 들어 String 클래스의 패키지는 java.lang이고, FQCN은 java.lang.String이 된다. String str = "class name"; java.lang.String fqcn = "Fully Q..
-
[live-study] 6: 상속개발/Java 2021. 1. 6. 16:02
목표 자바의 상속에 대해 학습하세요. 학습할 것 (필수) 자바 상속의 특징 super 키워드 메소드 오버라이딩 다이나믹 메소드 디스패치 (Dynamic Method Dispatch) 추상 클래스 final 키워드 Object 클래스 자바 상속의 특징 상속이란? 현실 세계의 상속은 부모가 가진 재산을 자식이 물려받는 것을 의미한다. 자바에서 상속도 마찬가지로 상위 클래스의 필드와 메소드를 하위 클래스에서 물려받아 사용할 수 있게 해주는 기능을 말한다. 자바의 상속은 "상속"보다 재사용과 확장에 더 가깝다. 상속이라고 설명하면 다음과 같은 가계도를 떠올리기 쉽다. 자바의 상속은 가계도보단, 분류도를 떠올리는게 적절하다. 위의 그림에서 생물은 동물과 식물의 상위 클래스라고 부르고, 동물과 식물은 생물의 하위 ..
-
[객체지향의 원리와 이해] 템플릿 콜백 패턴 (Template Callback Pattern)개발/OOP, Design Pattern 2021. 1. 3. 01:52
템플릿 콜백 패턴 전략을 믹명 내부 클래스로 구현한 전략 패턴 템플릿 콜백 패턴은 전략 패턴의 변형으로 모든 것이 전략 패턴과 동일한데, 전략을 익명 내부 클래스로 정의해서 사용한다는 특징이 있다. 템플릿 콜백 패턴을 리팩토링하면 중복되는 부분을 컨텍스트로 이관하여 코드가 간결해진다. 익명 내부 클래스를 사용하기 때문에 전략 패턴에서 사용한 각각의 전략 클래스(StrategyGun.. 등등)이 필요없다. 스프링의 3대 프로그래밍 모델 중 하나인 DI(의존성 주입)에서 사용하는 특별한 형태의 전략 패턴이다. 스프링을 이해하기 위해 전략 패턴, 템플릿 콜백 패턴, 리팩터링된 템플릿 콜백 패턴을 알아야 한다. 전략 패턴의 일종이므로 개방 폐쇄 원칙(OCP)와 의존성 역전 원칙(DIP)이 적용된다. 예제 아래 ..
-
[객체지향의 원리와 이해] 전략 패턴 (Strategy Pattern)개발/OOP, Design Pattern 2021. 1. 2. 21:40
전략 패턴 (Strategy Pattern) 클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴 다양한 전략을 생성해내고 필요에 따라 컨텍스트에 주입시키면 전략을 실행할 수 있다. 전략을 주입시킨다는 것은 모델링된 객체(어플리케이션 바운더리)에 전략을 매개값으로 주어서 사용되도록 하는 것이라고 할 수 있다. Startegy startegy = new Strategy(); // 전략 생성 Client client = new Client(); client.runContext(strategy); // 전략을 주입했다. 중요 포인트 전략 메서드를 가진 전략 객체 전략 객체를 사용하는 컨텍스트(전략 객체의 사용자/소비자) 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제3자, 전략 객체의 공급자..
-
[객체지향의 원리와 이해] 데코레이터 패턴 (Decorator Pattern)개발/OOP, Design Pattern 2021. 1. 2. 16:07
데코레이터 패턴 메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴 참고 : https://johngrib.github.io/wiki/decorator-pattern/ 원본에 장식을 더하는 패턴이다. 프록시와 구현 방법이 같다. 데코레이터 패턴은 클라이언트가 받는 값에 장식을 더하는 것이 목적이다. 프록시의 패턴의 목적은 제어의 흐름을 변경하거나 별도의 로직 처리이다. 그리고 반환값을 변경하지 않는다. 중요 포인트 장식자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스를 사용한다. 장식자는 실제 서비스에 대한 참조 변수를 갖는다.(합성) 장식자는 실제 서비스의 같은이름을 가진 메서드를 호출하고, 그 반환값에 장식을 더해 클라이언트에게 돌려준다. 장식자는 실제 서비스의 메서..
-
[객체지향의 원리와 이해] 싱글턴 패턴 (Singleton Pattern)개발/OOP, Design Pattern 2021. 1. 2. 16:03
싱글턴 패턴 클래스의 인스턴스, 즉 객체를 하나만 만들어 사용하는 패턴 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 인스턴스를 여러개 만들면 불필요한 자원을 사용하게 되고, 프로그램에 예상치 못한 결과를 초래하기도 한다. 그래서 이런 경우 하나의 인스턴스만을 만들고 계속 재사용하는 싱글턴 패턴을 사용한다. 중요 포인트 new를 실행할 수 없도록 생성자에 private 접근제한자를 지정한다. 유일한 단일 객체를 반환할 수 있는 정적 메소드가 필요하다. 유일한 단일 객체를 참조할 수 있는 정적 참조 변수가 필요하다. 예제 public class Singleton { static Singleton singletonObject; // 정적 참조 변수 private Singleton() {} // pr..