프레임워크 vs 라이브러리 둘의 차이는 제어의 흐름을 누가 갖고 있느냐? 이다 프레임워크는 사용자의 코드가 프레임워크의 흐름에서 필요할 때 불러 사용하고 라이브러리는 사용자의 코드 흐름에 맞춰 사용자가 필요할 때 라이브러리를 불러 사용한다. 스프링은 프레임워크이고, 개발자가 클래스를 짜놓으면 스프링이 필요할 때 객체 생성, 초기화, 사용, 소멸(라이프사이클)을 관리한다. 이렇게 제어의 흐름을 개발자가 아닌 프레임워크가 갖는 설계 원칙을 IoC(Inversion of Control)라고한다. IoC Container 스프링에서 사용하는 BeanFactory를 상속받은 ApplicationContext는 스프링이 IoC 기능을 위해 객체상태를 관리하는 컨테이너다 어떤 요청이 들어와서 어떤 객체가 컨테이너에 ..
오버라이딩이란? 상위 클래스에서 이미 정의된 메소드를 상속받는 하위 클래스에 맞춰서 메소드 오버라이딩을 통해 재정의하는 것 오버라이딩 시에 @Override 어노테이션 필수인가? 메소드 오버라이딩은 동적 할당으로 런타임시에 실행되는데 @Override 어노테이션을 오버라이딩 하는 메소드에 붙여주면 컴파일 시점에 상위클래스가 해당 메서드명을 갖고 있는지, 파라미터는 동일한지를 체크해줄 수 있다. class People{ public void sayMe(){ System.out.println("난 사람"); } } class Chulsu extend Poeple{ public void sayMee(){ // 메소드 오버라이딩 안되지만, 컴파일 시점에 체크하기 어려움 System.out.println("난 철..
인터페이스가 가진 객체지향의 특징 캡슐화, 추상화, 다형성, 상속성 그렇게 생각한 이유는? 1. 캡슐화 : 인터페이스의 구현체가 메소드를 어떻게 구현하는지 모르지만, 추상 메서드를 사용 2. 추상화 : 객체에서 특성을 제외하고 기능만이지만 추상화를 사용해 인터페이스 정의 3. 다형성 : 인터페이스를 구현할 때는 추상화 메서드를 반드시 구체화시켜야하는데 이 과정에서 메소드 오버라이딩 발생 구현체의 인스턴스의 참조변수로 구현체가 아닌 추상화된 인터페이스를 사용 가능 4. 상속성 : 인터페이스의 구현체는 인터페이스의 기능들을 재사용
캡슐화 객체지향세상에선 객체에게 상태를 얻어내는게 아닌 할일을 맡기고 결과물을 얻는다. 이때 할일을 맡길 때 해당 객체가 어떤 과정을 거치는 지는 알 필요도 없고 상황에 따라 접근도 불가해야한다. 자바에선 접근제한자로 필드나 메소드의 접근을 컨트롤하고, 상속이나 인터페이스 같이 구체화 된 객체를 생성하고 추상화에 의존해서 구현체가 어떻게 동작하는지 모른채로 추상메서드 이용 등이 있다. 추상화 객체지향세상에서는 객체를 서비스의 관심영역에 맞게 특징을 뽑아내 인스턴스의 설계도인 클래스로 만든다. 만약 은행 서비스를 만든다면 사용자는 '사람' 에서 은행에 돈을 맡길 '고객'의 특징을 뽑아내는 추상화 과정을 진행한다. 자바에선 클래스를 만들때 해당 클래스에 맞는 필드나 메소드를 정의하는 일이 된다. 다형성 자바..
도커를 공부시작 계기 슬슬 배포 및 서버 자체에 프로그램을 실행시켜 연동시키기보다 컨테이너에 띄워 자동배포하기 쉬운 환경에 대한 공부도 해보고 싶었고 요즘 서비스에서 많이 도입하는 MSA 관련의 기초지식이기도 하며 도커를 모르는 사람도 도커 네트워크를 이용할 수 있는 웹 서비스 프로그램을 만드는 팀프로젝트에 참가하게 되어 공부 시작 가상화를 사용하는 이유 도커에 대한 설명 전에 가상화 기술이 왜 필요한지에 대한 이해가 필요하다. 일반적으로 OS를 실행하려면 각 OS를 전용 물리적 서버에서 실행해야 한다. 여러 OS를 동시에 실행해야 하는 경우에는 물리적인 서버가 필요하고 다음과 같은 단점이 발생한다. 1. 여러 운영체제를 실행하는 것은 여러 물리적 서버를 이용한다는 것이므로 서버 관리 비용이 많이 듬 2..
입출력 외부 데이터는 자바 프로그램 외부에 존재하는 모든 데이터를 의미 하드 디스크상의 프로그램, 네트워크 상의 리소스, 메모리에 있는 자바 프로그램을 제외한 리소스 모두 외부 데이터 외부 데이터의 타입이 무엇이든 외부 데이터를 읽기나 쓰기 작업 시에 java.io나 java.nio의 객체를 사용 IO API Input ~InputStream (1바이트), ~Reader(2바이트) 로 끝나는 객체는 외부 데이터를 읽어오는 기능을 가진 입력 스트림 Output ~OutputStream, ~Writer로 끝나는 객체는 외부로 데이터를 출력하는 기능을 가진 출력 스트림 스트림 객체에서 Stream, Reader, Writer를 제외한 부분이 외부 데이터 타입을 가리킴 표준 입출력 입출력 대상을 지정하지 않았을..
IO의 보충제, NIO 자바는 JVM 위에서 작동해서 메모리에 올라간 데이터를 JVM메모리로 카피해오는 과정이 껴있어 직접 운영체제 레벨의 시스템콜을 사용하는 것 보다 느리다. 자바4에 NIO가 출시되고 자바 7에 클래스 설계 및 비동기 채널 등의 업데이트가 이루어진 NIO 2.0가 NIO의 하위 패키지에 포함된다. IO와 NIO의 차이점 Stream vs Channel IO 입력, 출력을 위해 각각의 Stream을 만들고 1바이트씩 처리하는 Stream 기반 NIO 채널 기반으로 하나의 채널로 양방향 입출력이 가능 Non-Buffer vs Buffer IO 1바이트 쓰기와 읽기의 조합으로 데이터를 주고 받음, 보조 스트림인 BufferedStream을 연결해서 사용하기도 함 NIO 버퍼를 사용해 복수개..