JAVA: 282개의 글
참조문서 : https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html 1. 쓰레드란? 자바의 메인메소드 역시 하나의 실행흐름으로서, 메인 쓰레드에 해당한다. 이것은 main() 메소드에서 Thread.currentThread().getName(); 를 통해 확인이 가능하다. 쓰레드를 이용하면 하나의 프로세스에서도 병렬적(동시적)으로 처리, 즉 여러 개의 처리 루틴을 가질 수 있다. 단순 반복의 코드를 실행할 때도 여러 개의 쓰레드를 만들어서 분리 시킨 뒤 결과 데이터를 받아 합치면 그만큼 시간을 절약할 수 있다. 특히 짧은 시간 내에 많은 사용자를 처리해야하는 대용량 시스템이나 CPU 활용을 극대로 해서 처리해야 하는 복잡한 연산 작업 등에 많이 ..
참조문서 : https://docs.oracle.com/javase/8/docs/api/java/io/package-frame.html io 부분에서 JDK 1.4 이전 방식을 클래식 I/O 라고 하고, 이후 방식을 NIO(Non-blocking I/O)라고 한다. 이제는 클래식 IO를 사용한다 해도 내부적으론 NIO를 활용하기 때문에 성능차이는 크게 없다. 1. java에서 I/O란? I/O를 스트림(Stream)이라고 부르기도 한다. 접두어로 in, read 가 붙으면 입력관련이고, out, write 가 붙으면 출력관련이다. 데이터를 읽고 쓰는 대상으로는 디스크, 사용자 입출력, 네트워크 등이 있다. 읽기 전용쓰기 전용 1 Byte 단위 처리 InputStream OutputStream 2 Byte..
참조문서 : https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html 1. 컬렉션이란? java.util 패키지에서 가장 핵심, 여러 개의 객체를 보관할 수 있게 만들어진 클래스들(자료구조) 주요 용어 리스트(List) : 순서를 가지고 있으며, 중복을 허용하는 보관 구조(인덱스 번호가 핵심) 세트(Set) : 순서를 가지지 않고, 데이터의 중복을 허용하지 않는 구조 맵(Map) : 키-값을 가지며, 키를 가지고 원하는 데이터를 검색하는 구조 Element : 자료구조 안에 들어가는 데이터를 의미 시간복잡도 사진출처: http://bigocheatsheet.com/ 2. *List 계열 리스트는 내부적으로 무한대의 배열을 가진다. Array..
1. JVM(Java Virtual Machine)이란? jvm은 java를 운영체제로부터 독립적으로 실행시켜주는 핵심이자 원리이다. 예를들어 C언어의 경우 소켓프로그램을 윈도우에서 짜면, 리눅스에서는 같은 코드로 돌아가지 않는다. 컴파일조차 실패할거다. 헤더파일도 다르고 함수명도 전부 다르니ㅋㅋ 그렇지만 java는 소켓프로그램짜두면 윈도우든 리눅스든 맥이던 플랫폼에 상관없이 돌아간다. 2. JVM 구성요소 JVM은 위 그림처럼 4가지 구성 요소를 가지고 있다. 3. Class Loader .java 파일을 javac로 컴파일하면 바이트코드(.class)가 나온다. 이 파일을 컴파일 타임이 아닌 런타임에(동적으로) 메모리로 올려서 실행하는 부분이 Class Loader이다. ※ Class Loader에 ..
구조패턴 목록 어댑터 패턴 (Adapter Pattern) 브릿지 패턴 (Bridge Pattern) 컴포짓 패턴 (Composite Pattern) 데코레이터 패턴 (Decorator Pattern) 퍼사드 패턴 (Facade Pattern) 플라이웨이트 패턴 (Flyweight Pattern) 프록시 패턴 (Proxy Pattern) 이미지 변환이나 디코딩과 같이 비용이 높은 경우에 가상프록시 패턴이 유용할 것 같고, 엑세스 관련 기능은 자주 사용되는 부분이기 때문에 보호프록시 패턴은 항상 필요로 할 것 같다. 장점 1) 가상 프록시 : 시간이 오래 걸리는 프로세스가 있다면 생성시 동작하도록 하던 로직을 함수를 호출하여 실행할 때 동작하도록 미뤄둘 수 있습니다. 따라서 프로그램이 시작되는 경우에는 오..
구조패턴 목록 어댑터 패턴 (Adapter Pattern) 브릿지 패턴 (Bridge Pattern) 컴포짓 패턴 (Composite Pattern) 데코레이터 패턴 (Decorator Pattern) 퍼사드 패턴 (Facade Pattern) 플라이웨이트 패턴 (Flyweight Pattern) 프록시 패턴 (Proxy Pattern) 게임이나 지도처럼 동일한 객체를 특정 속성만 바꿔서 재사용이 가능한 경우에 적용하면 큰 효과를 기대할 수 있는 패턴인 것 같다. 장점 - 객체의 수를 줄입니다. - 객체가 지속되는 경우에 필요한 메모리 및 저장장치의 양을 줄입니다. 사용시기 - 응용프로그램이 많은 수의 객체를 사용하는 경우 - 물체의 수량으로 인해 저장비용이 높은 경우 - 응용프로그램이 객체 ID에 의존..
구조패턴 목록 어댑터 패턴 (Adapter Pattern) 브릿지 패턴 (Bridge Pattern) 컴포짓 패턴 (Composite Pattern) 데코레이터 패턴 (Decorator Pattern) 퍼사드 패턴 (Facade Pattern) 플라이웨이트 패턴 (Flyweight Pattern) 프록시 패턴 (Proxy Pattern) 사용하는 객체를 배려한 패턴이라고 생각한다. 각각의 단위기능을 사용자가 더 편리하게 이용할 수 있도록 하려면 인터페이스를 어떤 형태로 제공해야 하는지를 많이 고민해야 할 것 같다. 장점 - 하위 시스템 구성요소의 복잡성으로부터 클라이언트를 보호합니다. - 서브 시스템과 클라이언트 사이의 느슨한 결합을 촉진합니다. 사용시기 - 복잡한 하위 시스템에 간단한 인터페이스를 제공..
구조패턴 목록 어댑터 패턴 (Adapter Pattern) 브릿지 패턴 (Bridge Pattern) 컴포짓 패턴 (Composite Pattern) 데코레이터 패턴 (Decorator Pattern) 퍼사드 패턴 (Facade Pattern) 플라이웨이트 패턴 (Flyweight Pattern) 프록시 패턴 (Proxy Pattern)
구조패턴 목록 어댑터 패턴 (Adapter Pattern) 브릿지 패턴 (Bridge Pattern) 컴포짓 패턴 (Composite Pattern) 데코레이터 패턴 (Decorator Pattern) 퍼사드 패턴 (Facade Pattern) 플라이웨이트 패턴 (Flyweight Pattern) 프록시 패턴 (Proxy Pattern) 객체와 객체 사이의 연관관계가 계층으로 표현해야 하고, 같은 계층에서 다른 역할을 구현할 필요가 있다면 이 패턴이 필요할 것 같다. 장점 - 기본적이고 복잡한 객체를 포함하는 클래스 계층을 정의합니다. - 새로운 종류의 구성 요소를 쉽게 추가할 수 있습니다. - 관리 가능한 클래스 또는 인터페이스로 구조의 유연성을 제공합니다. 사용법 - 객체의 전체 또는 부분 계층을 나..
구조패턴 목록 어댑터 패턴 (Adapter Pattern) 브릿지 패턴 (Bridge Pattern) 컴포짓 패턴 (Composite Pattern) 데코레이터 패턴 (Decorator Pattern) 퍼사드 패턴 (Facade Pattern) 플라이웨이트 패턴 (Flyweight Pattern) 프록시 패턴 (Proxy Pattern) 인터페이스 구현 시 로직이 많이 변경되어도 사용방법에 있어서 차이가 없도록 코드를 작성해야할 것 같다. 원하는 기능이 있다면 어떻게 원래의 함수에 잘 스며들 수 있을지 고민이 필요할 듯 하다. 장점 - 인터페이스와 구현을 분리할 수 있습니다. - 확장성을 향상시킵니다. - 클라이언트로부터 구현 정보를 숨길 수 있습니다. 사용시기 - 기능적 추상화와 구현 사이에 영구적인 ..