전체 글
-
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 (스트래티지 패턴) 알고리즘 변화를 캡슐화로 처리 스트래티지 패턴은 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴이다. 여기에서 전략이란 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 문제를 해결하는 알고리즘 등으로 이해할 수 있다. 프로그램에서 전략을 실행할 때는 쉽게 전략을 바꿔야할 필요가 있는 경우가 많이 발생한다. 특히 게임 프로그래밍에서 게임 캐릭터가 자신이 처한 상황에 따라 공격이나 행동하는 방식을 바꾸고 싶을때 스트래티지 패턴은 매우 유용하다. 같은 문제를 해결하는 여러 알고리즘이 클래스 별로 캡슐화되어 있고, 이들이 필요할 때 교체할 수 있도록함으로써 동일한 문제를 다른 알고리즘으로 해결할 수 있게 하는 디자인 패턴이다. 클라이언트가 전략을..
-
커널(Kernel)Computer Science 2020. 12. 9. 23:41
커널은 컴퓨터의 운영체제의 핵심이 되는 컴퓨터 프로그램의 하나로, 시스템의 모든 것을 완전히 통제한다. 운영 체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러가지 서비스를 제공한다. 소프트웨어와 하드웨어간의 커뮤니케이션을 관리하는 프로그램 운영체제의 핵심 구성요소로서 입출력을 관리하고 소프트웨어로부터의 요청을 컴퓨터에 있는 하드웨어(CPU, 메모리, 저장장치등)가 처리 할 수 있도록 요청을 변환하는 역할을 한다. 이렇게 하드웨어를 관리하고 필요한 프로세스를 나눠주는 등 여러 시스템 자원을 제어하고, 컴퓨터 부팅시 부트로더에 의해 로드되어 항상 메모리에 상주하게 됩니다. 커널의 역할 보안 커널은 컴퓨터 하드웨어와 프로세스 보안을 책임진다. 자원 관리 한정된 시스템 자원을 효율적으로 관리하여 프로그램의..