본문 바로가기

분류 전체보기

(433)
Java 컬렉션(Collection) 자바의 Collection은 대표적으로 List, Set, Map(위에서는 상속하고있지만 Collection으로 분류) 이렇게 제시한다. 1. List List는 순서를 보장하는 데이터들의 집합(중복 허용). 1) Vector 동기화 처리가 보장되는 동적 Array로, 동기화 처리에 따른 성능이 떨어지기에 잘 사용하지 않는다. 2) ArrayList Array와 같은 구조로 이루어져 삽입/삭제 시에 Array의 복사로 처리한다. 그래서 중간 삽입이나 많은 삽입삭제 과정에 있어 성능이 저하된다. 그렇지만 Index를 통해 임의 접근은 성능이 우수하다. 3) LinkedList 다음 자료의 위치 정보를 통해 이어져있는 List이다. 삽입/삭제 시에 위치 정보만 수정하면 된다. 따라서 삽입/삭제가 많은 자료 ..
Java 추상클래스, 인터페이스 1. 추상클래스 자바의 추상클래스란 그 내용을 구체적으로 명시하지 않은 클래스를 뜻한다. 특정 메소드를 정의하지 않고 추상클래스를 상속하는 하위 클래스에서 이를 정의하도록 한다. 사용하는 이유는 간단하다. 클래스들에서 공통된 변수와 공통된 메소드를 필요로 한 상황에서 메소드는 구체적으로 내용이 다르게 정의되어야 할 경우 사용한다. 1) 필드와 메소드의 통일된 규격이 필요하고 이 규격 내에서 구체적으로 구현해야 하는 경우에 사용한다. 2) 실체 클래스 개발을 효율적으로 해야할 때 사용한다. // 추상클래스 public abstract class abclass{ // 공통 변수 int v1; int v2; // 추상메소드 public abstract void method1(); } // 실체클래스 class..
Java 오버로딩과 오버라이딩 Java에서 다형성(Polymorphism)을 지원하기 위한 대표적인 두 가지 방식인 오버로딩(Overloading)과 오버라이딩(Overriding). 비슷한 단어 때문에 헷갈려하곤 한다. 1. 오버로딩 오버로딩이란 특정 메소드를 같은 이름으로 매개변수 타입(자료형, 개수)만 다르게 하여 구성하는 것을 말한다. 참고로 반환형은 상관없다. 이러한 오버로딩은 생성자에도 적용되어 생성자 오버로딩도 가능하다(하나의 메소드로 볼 수 있기에). class Test{ public void method(void){ System.out.println("void 매개변수 메소드"); } public void method(int v1){ System.out.println(v1+ " int형 1개 매개변수 메소드"); } ..
Java 멤버 변수, 접근제어자 1. Java 멤버 변수 멤버 변수는 Class 내부에 선언이 되어있는 변수를 뜻한다. 이러한 멤버 변수는 다시 Class 변수와 Instance 변수로 구분을 한다. Class 변수는 해당 Class내에서 공유하는 변수를 뜻한다. 그래서 클래스가 메모리에 올라가는 시기에 생성이 되어 Class의 Instance로도 접근이 가능하며 Class 자체로도 접근이 가능하다. 반면에 Instance 변수는 클래스의 인스턴스 별로 따로 저장하는 변수를 뜻한다. 그래서 인스턴스가 생성되는 시기에 생성이 되어 Instance 들마다 따로 접근이 가능하다. 지역 변수는 메소드 내에서 유효한 변수이다. public class Member{ static int claVariable = 20; // 클래스 변수 int in..
Java 언어의 특징 1. Java와 C의 비교 1) 객체지향 vs 절차지향 Java는 객체지향언어(OOP)로 이루어져 Class 중심으로 코드를 동작되는 반면에 C는 절차지향으로 함수 중심의 절차에 따라 코드가 동작된다. 2) JVM의 유무 Java는 Virtual Machine(VM)위에서 동작되므로 플랫폼 독립적으로 코드가 동작할 수 있다. 3) Garbage Collection Java는 자동으로 Garbage Collection이 동작하여 빈 메모리를 비워주므로 개발자가 메모리 관리에 있어 편리함을 느낄 수 있는 반면에 C는 수동으로 Garbage Collection을 구성해야 한다. 4) 그 외 Unsigned int 지원 여부. Java는 Call-by-Value(reference도 참조값을 복사함). 2. Ja..
컨테이너 기술 리눅스 시스템과 관련된 프로젝트를 진행하면서 도커라는 기술에 대해서 듣게 되었다. 처음에 도커라는 것이 뭔지 몰랐는데 컨테이너 기술 중 대표적인 것이라고 한다. 그래서 컨테이너 기술에 대해 살펴보고자 이렇게 정리해본다. 1. 컨테이너 기술이란? 컨테이너 기술이란 쉽게 말해 App과 필요한 library, binray, config 등을 패키지로 묶어 배포하는 것을 말한다. 즉, 묶어서 하나의 실행 환경을 구성할 수 있도록 하는 것이다. 운영체제를 제외한 실행에 필요한 모든 환경이 따라오므로 다른 컴퓨팅 환경에서도 오류를 최소화할 수 있다. 운영체제를 제외한 모든 환경을 패키지로 제공하기에 OS 레벨의 가상화라고도 부른다. cf) HW 레벨의 가상화 참고로, 컨테이너 기술은 OS 레벨의 가상화라고 불리면서..
웹 서버 Nginx_Apache 웹 서버는 대표적으로 Nginx와 Apache 두 가지를 많이 든다. 웹 어플리케이션을 개발해본 경험이 있다면 두 용어에 대해서는 접했던 경험이 있을 것이다. (나도 후에 알게 되었는데 EC2를 배포할 때 Nginx를 썼던 것이었다...) 1. Nginx Nginx의 가장 큰 특징은 Event-Driven으로 동작된다. 즉, 서버로 들어오는 요청을 Event로써 어떤 일을 해야 하는지에 대해서만 전달하고 다음 Event를 처리한다. 그래서 하나의 프로세스를 통해서 들어오는 많은 요청들을 빠르게 처리가능하다. Apache와 달리, CPU에 관계없이 모든 IO들을 전부 Event Listener로 미루기 때문에 흐름이 끊기지 않고 응답이 빠르게 진행이 되어 1개의 프로세스로 더 빠른 작업이 가능하게 될수 있..
메모리 단편화(페이징, 세그먼테이션) 단편화란 프로세스가 메모리를 요청할 때 할당 가능한 메모리가 충분히 존재함에도 메모리가 나누어져 존재하여 할당을 할 수 없을 경우를 말한다. 이러한 단편화는 외부 단편화와 내부 단편화로 구분한다. 외부 단편화: 할당 후 메모리 자체에 남는 공간 (페이징 기법-> 메모리를 페이지라는 단위로 나눈 다음 필요한 페이지 단위만큼 할당, 너무 작게하면 페이지 맵핑 비효율) 내부 단편화: 할당 후 프로세스 내부에서 남는 공간 (세그먼테이션 기법 -> 가상메모리를 서로 다른 논리적 크기인 세그먼트로 분할하여 제공, 실제 연속적인 공간에 저장)