전체 글
-
Java Collection FrameworkComputer Science 2020. 12. 21. 14:58
컬렉션은 기본 데이터형이 아닌, 참조 데이터형만 저장이 가능하다는 것이다. 따라서 Collection에서의 데이터는 Object 타입의 객체로서 저장이 되는 것인데, 그렇다면 여기서 기본 데이터형은 어떻게 저장하고 관리할 수 있을까? 기본 데이터형인 5를 Wrapper클래스의 Integer 타입 객체로 변환하여 autoboxing으로 저장할 수 있다. 즉, 오토박싱을 통해 기본 데이터형을 컬렉션에 직접 대입하여 저장해도 컴파일러가 자동으로 Wrapper 클래스로 변환해준다 저장된 값을 얻어올 때에도 객체화된 데이터를 기본 데이터형으로 바로 얻어올 수 있는 데, 이 경우 언박싱(unboxing)이라는 용어를 사용한다.List : Interface동일한 데이터의 중복을 허용한다.데이터 저장 순서가 유지된다힙..
-
JVM 이해Computer Science 2020. 12. 19. 17:39
JVM의 역할 Java Byte Code를 OS에 맞게 해석해주는 역할 JVM이 Byte Code를 해석해주기 때문에 OS에 종속적이지 않고 실행 가능 (플랫폼 독립적) 또한 GC, 메모리 관리 등을 수행한다. JVM 실행 과정 .java -> (javac) -> .class -> (jvm) -> process Java Compiler는 .java 파일을 .class (java byte code)로 변환 byte code는 기계어가 아니기 때문에 OS에서 바로 실행되지 않음 이 때 JVM이 OS가 Byte Code를 이해할 수 있도록 해석해줌 Byte Code는 JVM위에서 OS에 상관없이 실행 JVM의 해석을 거치기 때문에 c언어와 같은 로우레벨 언어에 비해 속도가 느림 JVM 구조 .java → (j..
-
Android ThreadProgramming/Android 2020. 12. 18. 14:15
안드로이드에서 Thread 기본적으로 한 어플리케이션 내의 모든 컴포넌트들은 같은 프로세스 내에서 동작해야 한다. 어플리케이션이 launch되면, 안드로이드 시스템은 해당 어플리케이션이 메인쓰레드를 생성한다. 메신 쓰레드는 UI위젯을 그리는 역할을 수행하기 때문이다. 또한 UI와 상호작용한다. 즉, 메인쓰레드는 UI와 상호작용하는 중요할 역할을 하고 있기 때문에 UI 쓰레드라고 한다. 안드로이드 시스템은 어플리케이션을 구성하는 각 컴포넌트 객체마다 쓰레드를 생성하지 않는다. 동일한 프로세스 내에서 실행되는 모든 컴포넌트들은 UI 쓰레드에서 인스턴스화 되며, 각 컴포넌트들에 대한 호출은 UI 쓰레드에서 실행된다. 결과적으로, 시스템 콜백에 응답하는 메소드들은 항상 프로세스의 UI 쓰레드에서 실행되는 것이다..
-
[Design Pattern] Command PatternProgramming/DesignPattern 2020. 12. 17. 18:02
커맨드 패턴(Command Pattern) 커먼드 패턴은 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에, 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할 때 유용하다. 커맨드 패턴은 실행될 기능을 캡슐화함으로써 기능의 실행을 요구하는 호출자 클래스와 실제 기능을 실행하는 수신자 클래스 사이의 의존성을 제거한다. 따라서 실행될 기능의 변경에도 호출자 클래스를 수정 없이 그대로 사용할 수 있도록 해준다. Command : 실행될 기능에 대한 인터페이스. 실행될 기능은 execute 메서드로 선언함. ConcreteCommand: 실제로 실행되는 기능을 구현. 즉, Command라는 인터페이스를 구현함. LampOnCommand , AlarmOnCommand Invoker: ..
-
의존성 주입(Dependecy Injection) 이란?Computer Science 2020. 12. 17. 01:55
의존성 주입(DI, Dependency Injection)이란? 하나의 객체에 다른 객체의 의존성을 제공하는 기술이다. 의존성: 객체 지향에서 두 클래스 간의 관계이다. 둘 중 하나가 다른 하나를 필요로 한다. 예를 들면, Computer 클래스는 Cpu 클래스에 의존적이다. 주입: 생성자나 메서드 등을 통해 외부로 부터 생성된 객체를 전달 받는 것을 의미한다. public class Computer{ private CPU cpu; public void setCPU(CPU cpu){ this.cpu = cpu; } } setCPU(CPU) 메서드를 통해 외부로 부터 생성된 객체를 전달받아 멤버 변수에 할당하는 코드이다. 요악하면, 의존성 주입은 "의존 관계에 있는 클래스의 객체를 외부로 부터 생성하여 주..
-
[Design Pattern] State PatternProgramming/DesignPattern 2020. 12. 15. 20:15
State Pattern (스테이트 패턴) - UML 상태 머신 이해하기 - 상태를 캡슐화로 처리하는 방법 이해하기 - 스테이트 패턴을 통한 상태 변화 처리 방법 이해하기 - 새로운 상태를 추가할 수 있는 처리 방법 이해하기 상태(State)란? 객체가 시스템에 존재하는 동안, 즉 객체의 라이프 타임 동안 객체가 가질 수 있는 어떤 조건이나 상황을 표현한다. 예를 들면, 객체가 어떤 상태에 있는 동안 어떤 액티비티 등을 수행하거나 특정 이벤트가 발생하기를 기다리는 것이다. 형광등 예시 State Pattern을 사용하지 않고 형광등 클래스를 만든다고 할 때, 형광등의 상태(ON/OFF/SLEEP)에 따라 조건문을 걸어서 코딩을 해야한다. 이러한 방식은 작업을 수행할 때의 상태에 따라 상태 하나하나가 어떤..
-
[Design Pattern] Singleton PatternProgramming/DesignPattern 2020. 12. 14. 20:07
싱글턴 패턴의 이해 멀티 쓰레드 환경에서 싱글턴 패턴 싱글턴 패턴은 인스턴스가 오직 하나만 생성되는 것을 보장하고 어디에서든 이 인스턴스에 접근할 수 있도록 하는 디자인 패턴이다. *Singleton: 하나의 인스턴스만을 생성하는 책임이 있으머, getInstance() 메서드를 통해 모든 클라이언트에게 동일한 인스턴스를 반환하는 작업 수행한다. public class Printer { private static Printer printer = null; public static Printer getPrinter() { if (printer == null) printer = new Printer(); return printer; } } 위 코드를 보면, printer 변수와 getPrinter() 메서드..
-
[Design Pattern] Strategy PatternProgramming/DesignPattern 2020. 12. 10. 16:40
Strategy Pattern (스트래티지 패턴) 알고리즘 변화를 캡슐화로 처리 스트래티지 패턴은 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴이다. 여기에서 전략이란 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 문제를 해결하는 알고리즘 등으로 이해할 수 있다. 프로그램에서 전략을 실행할 때는 쉽게 전략을 바꿔야할 필요가 있는 경우가 많이 발생한다. 특히 게임 프로그래밍에서 게임 캐릭터가 자신이 처한 상황에 따라 공격이나 행동하는 방식을 바꾸고 싶을때 스트래티지 패턴은 매우 유용하다. 같은 문제를 해결하는 여러 알고리즘이 클래스 별로 캡슐화되어 있고, 이들이 필요할 때 교체할 수 있도록함으로써 동일한 문제를 다른 알고리즘으로 해결할 수 있게 하는 디자인 패턴이다. 클라이언트가 전략을..