SOLID는 OOP 4대특성을 발판으로 하고, 디자인 패턴을 공부하기 전에 꼭 알아야할 SOLID 원칙에 대해 알아본다. 객체지향 프로그래밍의 의미는 '객체에게 데이터를 요구하지 말고 작업을 요구하라'라고 하는데 .. 철학을 하는건지 개발을 공부하는건지 모르겠지만 일단 SOLID 원칙에 대해 알아본다. SRP(Single Responsibility Principle) "어떤 클래스를 변경해야하는 이유는 오직 하나뿐이여야한다." 는 하나의 클래스는 하나의 책임만 가져야한다로 해석할 수 있다. 비단 클래스에만 국한 되는 것이 아닌 메서드도 하나의 책임(기능)만 맡도록 짜는 것이 유지보수하기에 용이하다. 이유는 해당 클래스, 메소드에 대한 변경이 필요할 때 쉽게 찾을 수 있고, 파급효과도 적기 때문이다. 이전..
4장의 중요한 내용들을 정리했다. abstract 키워드, 추상 클래스, 추상 메서드 추상 메서드는 일반 메서드 앞에 abstract 키워드를 붙여 사용한다. 추상 메서드는 선언부는 있지만 구현부는 없어야한다. abstract class Animal{ abstract public void say(); } class Mouse extends Animal{ @Override public void say(){ System.out.println("찍찍"); } } class Cat extends Animal{ @Override public void say(){ System.out.println("야옹"); } } public class Main{ public static void main(String[] arg..
3장의 내용 중 중요한 내용들을 정리했다. 클래스와 객체의 개념 흔히 얘기하는 붕어빵과 붕어빵틀처럼 생산수단과 생산물에 초점을 맞추는 것이 중요한게 아니다. 클래스는 분류에 대한 개념이고, 객체는 실체이다. 따라서 올바른 예시를 들자면, 사람과 강호동 같은? class Book{ public String name; public int price; } public class Main{ public static void main(String[] args){ Book springBook = new Book(); } } 정의한 클래스대로 만들어져 힙 메모리에 올라간 객체를 "클래스의 인스턴스"라고 한다. 위 코드에서 new Book()으로 힙에 올린 객체를 Book클래스의 인스턴스라고 하고, 인스턴스 변수 sp..
Socket java.net.Socket 클래스는 TCP 통신을 할때 사용하는 객체이다. 예를 들어 웹서버에 접속할 때 웹브라우저를 실행한 후 URL을 입력하면 웹서버에 서비스를 요청하고 응답을 받을 수 있다. 소켓 생성 Socket(String host, int port) host : 접속하는 서버의 IP 또는 도메인 이름을 지정한다. port : d접속하는 서버의 포트를 지정한다. 스트림 생성 TCP 통신을 하는 Socket 객체는 외부와 데이터를 주고받아야 한다. 그래서 소켓 생성 후에는 데이터 입출력을 위한 스트림을 생성해야한다. public InputStream getInpuStream() public OutputStream getOutpuStream() public class Test{ pub..
스레드란 ? 프로세스 기반의 멀티태스킹은 여러 프로그램이 병핼 실행되는 것, 스레드 기반의 멀티태스킹은 하나의 프로그램에서 여러개의 작업을 병행하는 것 예를 들어 워드프로세서에서 문서를 편집하면서 동시에 프린트 작업을 하는 것은 문서편집과 문서출력 두 개의 스레드가 병행되는 것이다. 스레드 목적 보통은 메인 스레드 하나를 사용했고 메인 스레드는 자바 프로그램 시작 시 자동으로 생성되며 main() 메서드의 명령문 실행이 완료되면 메인 스레드는 종료되고 자바 프로그램도 종료된다. 멀티스레드로 구현해야 하는 상황 여러 사용자가 동시에 요청하는 상황 외부 데이터 처리 메인스레드만 실행되는 싱글 스레도 환경과 함께 실행되던 모든 스레드가 종료되어야 프로그램이 종료된다. 구현 및 실행 run() 메인 스레드가 아..
스트림 사용 3단계 스트림 생성 배열이나 컬렉션의 요소들을 처리하려면 가장 먼저 요소들을 갖는 스트림을 생성해야 한다. 중개 연산 중개 연산은 스트림을 받아서 스트림을 반환한다 데이터를 추출, 변환, 조합하는 작업 등을 수행 할 수 있고 여러개의 중개연산은 지정할 수 있다. 최종 연산 결과를 산출하기 위한 최종 연산을 수행한다. 이떄 중개 연산에서 미뤘던 지연연산을 수행한다. 최종연산 이후로 스트림은 자동소멸하여 더는 사용할 수 없다. 스트림 특징 명령행 프로그래밍 방식 int[] num = {1,2,3,4,5}; int sum= 0; for(int i=0;in%2==1).sum(); 파이프 필터 패턴 입력 : Arrays.stream(num) 필터링 : filter(람다식) 출력 : sum() 이처럼 ..
람다식 JDK8에서 추가된 기능으로 개발자가 핵심 내용만 구현하고 나머지는 자바 언어에서 자동으로 처리하는 방식인 함수형 스타일이어서 코드가 간결해진다. 인터페이스를 익명클래스보다 간편하게 구현하려고 사용하기 때문에 먼저 인터페이스 구현 방법부터 살펴본다. 인터페이스 구현 방법 interface MyInterface{ public void print(); } implements 키워드로 클래스 선언 class MyClass1 implements MyInterface{ @Override public void print(){ System.out.println("MyClass1"); } } 익명 클래스 사용 MyInterface mi = new MyInterface(){ @Override public void..
제너릭 클래스 클래스 선언부에서 클래스 이름 다음에 기호를 표시한다. 그리고 안에는 타입 매개변수의 이름을 저근다. 제네릭 클래스의 인스턴스를 생설할 때 타입 매개변수는 인자로 전달받은 타입으로 대채된다. 제너릭 클래스 선언 public class Bag{ T thing; public Bag(T thing){ this.thing = thing; } } 제너릭 클래스 생성 new Bag(new Book()); new Bag(new Book()); 제너릭 클래스를 사용하면 인스턴스 생성 시 타입을 지정할 수 있으므로 동적으로 코드를 재사용 할수 있는 장점이 있다. 제너릭 클래스 참조 제너릭 클래스의 인스턴스를 생성한 후 참조하는 변수가 있어야 계속 사용할 수 있다. 제너릭 인스턴스의 참조변수 타입을 선언하는..