Java 82

Ch 05. 객체 지향 설계 5원칙 SOLID

객체 지향 설계의 원칙, SOLID 에 대해 각 예시와 함께 살펴보려고 한다. 평소에 자주 사용하는 Java, JDBC 도 SOLID와 관련되어 있다. SRP (Single Responsibility Principle, 단일 책임원칙) 단일책임원칙이란? 하나의 클래스는 하나의 역할만 수행해야한다는 의미. "어떤 클래스를 변경해야하는 이유는 오직 하나뿐이어야한다." Ex 1) SRP를 만족하는 설계 "남자" 클래스는 다음 네 가지 역할을 하고 다음 8개의 메서드로 구성된다. 남자친구 역할 - 기념일 챙기기(), 데이트하기() 아들 역할 - 효도하기(), 안마하기 사원 역할 - 출근하기(), 아부하기()" 소대원 역할 - 사격하기(), 구보하기() 이를 SRP에 맞게 바꾸려면? 남자클래스 안에서의 역할과 책..

Ch 02. Java와 절차적/구조적 프로그래밍

Java 로 작성된 프로그램을 실행하기 위한 과정에 대해 알아보려고한다. JDK, JRE, JVM 의 역할 Java 로 작성된 프로그램을 실행하기 위해서는 JVM(Java Virtual Machine, 자바 가상 머신)이 필요하다. JVM으로 Java 코드를 실행하는 것은 컴퓨터가 어떤 프로그램을 실행하는 것과 비슷하다. ex) 어떤 소프트웨어 개발자가 개발 도구를 이용해서 개발하고 OS를 통해서 물리적 컴퓨터인 하드웨어 상에서 구동한다. JDK(Java Development Kit, 자바 개발 도구): JVM용 소프트웨어 개발 도구이다. 컴파일러인 javac.exe를 포함한다. JRE(Java Runtime Enviornment): JVM용 운영체제로서Java.exe(자바 프로그램 실행기)를 포함한다...

Ch 03. 자바와 객체 지향

객체 지향 객체 지향은 '인간' 지향 언어이다. 객체 지향은 현실 세계를 반영한다. 기계에 맞춰서 프로그래밍하던 방식(절차 지향 프로그래밍)을 버리고 인간이 사물을 인지하는 방식대로 프로그래밍하고자 만들고자 객체 지향 프로그래밍 언어가 탄생했다. 클래스와 객체의 관계는 붕어빵틀과 붕어빵이라기보다는 분류와 실체의 개념에 가깝다. 클래스는 분류, 집합, 같은 속성과 기능을 가진 객체를 총칭하는 개념이다. 객체지향의 대표적인 특성 캡슐화(정보 은닉) 추상화(모델링) 상속(재사용) 다형성(사용 편의) 추상화 = 모델링 Object 의 의미는 '객체'보다는 '개체'라는 뜻에 더 가깝다. 객체는 세상에 존재하는 유일무이한 사물을 말한다. (By 저자) 객체를 특성(속성, 기능)에 따라 분류해보니 객체를 통칭할 수 ..

Chapter 16 네트워킹(Networking)

1. 네트워킹(Networking) 네트워킹(Networking): 두 대 이상의 컴퓨터를 케이블로 연결해서 네트워크를 구성하는 것을 말한다. 초기의 네트워크는 몇 대의 컴퓨터로 구성됐으나 현재는 셀 수 없을 정도로 많은 컴퓨터가 인터넷이라는 하나의 거대한 네트워크를 구성하고 있으며 인터넷을 통해 다양하고 방대한 양의 데이터를 공유 가능하다. 자바의 java.net 패키지를 이용하면 네트워크 애플리케이션의 데이터 통신 부분을 쉽게 작성 가능 1.1 클라이언트(client)와 서버(server) 클라이언트와 서버는 컴퓨터간의 관계를 역할로 구분하는 개념이다. 서버(server): 서비스를 제공하는 컴퓨터 보통적으로 서버는 다수의 클라이언트에게 서비스를 제공하기 때문에 고사양의 하드웨어를 갖춘 컴퓨터이다. ..

Java/Java의 정석 2023.03.02

Chapter 13 스레드(Thread)

1. 프로세스(Process)와 스레드(Thread) Def) 프로세스(Process): 실행 중인 프로그램이다. 프로그램을 실행하면 OS로부터 필요한 자원(메모리)을 할당 받아서 프로세스가 된다. 프로세스는 프로그램을 수행하기 위해 필요한 데이터, 메모리 등의 자원 그리고 스레드로 구성된다. Def) 여기서 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것을 스레드라고 한다. 다시 말해 스레드는 프로세스의 실행 단위를 말한다. 스레드를 경량 프로세스(LWP, Light Weight Process)라고도 부른다. 프로세스는 하나 이상의 스레드를 포함한다. 프로세스는 공장, 스레드는 작업을 처리하는 일꾼이라고 이해할 수 있다. 멀티스레드 프로세스(multi threaded process): 둘 이상의 ..

Java/Java의 정석 2023.03.01

Chapter 15 입출력 I/O

1. 자바에서의 입출력 1.1 입출력이란? - Input & Ouput => 입출력 1.2 스트림(stream) 입출력을 수행하려면 (어느 한쪽에서 한 쪽으로 데이터를 전달하려면) 데이터를 전송할 수 있는 무언가가 필요하다. "스트림"이란 데이터를 운반하는데 사용되는 연결 통로이다. 스트림은 단방향 통신만 가능하기 때문에 입력, 출력을 동시에 처리할 수 없다. 스트림은 Queue와 같이 선입선출 구조로 되어있어서 먼저 입력된 데이터가 먼저 출력된다. 1.3 바이트기반 스트림 - InputStream, OutputStream 스트림은 바이트 단위로 데이터를 전송하며 입출력 대상에 따라 다음과 같은 스트림이 있다. InputStream: read() 오버라이드하고 OutputStream: write() 오버..

Java/Java의 정석 2022.03.07

Chapter 14 람다와 스트림

ㅇ1. 람다식(Lambda expression) 1.1 람다식이란? Def) 람다식: 함수(메서드)를 간단한 식(expression)으로 표현하는 방법 - 람다식은 사실 익명 클래스의 객체와 동등하다. -> 람다식을 다루기 위한 참조 변수가 필요하다. - 함수와 메서드의 차이 -> 근본적으로 동일, 함수는 일반적 용어, 메서드는 객체지향개념 용어 -> 함수는 클래스에 독립적, 메서드는 클래스에 종속적이다. 1.2 람다식 작성하기 1) 메서드의 이름과 반환 타입을 제거하고 '->'을 블록 앞에 추가한다. 2) 반환값이 있는 경우, 식이나 만 적고 return문을 생략가능하다. (세미콜론 안 붙인다.) 3) 매개변수 타입이 추론 가능하면 생략 가능하다. (대부분 생략 가능) - 작성 시 주의사항 1) 매개 ..

Java/Java의 정석 2022.03.04

Chapter 12 지네릭스, 열거형, 에너테이션

1. 지네릭스(Generics) 1.1 지네릭스란? Def) 지네릭스: 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능 - 자료형을 제한해주는 기능이다. - 타입 안정성이 높아지고 형변환의 번거로움이 줄어들어 간결해진다. - 의도하지 않은 타입의 객체가 저장되는 것을 막는다. 1.2 지네릭 클래스의 선언 - 클래스와 메서드에 선언할 수 있다. Ex) 지네릭 클래스 Box가 선언되어 있을 때 - Box: 지네릭 클래스, 'T의 Box' 또는 'T Box'라고 있는다. - T: 타입 변수 또는 타입 매개변수(T는 타입 문자) - Box: 원시 타입(raw type) Note) 지네릭스의 제한 - 지네릭 타입의 배열을 생성할 수 없다. - static 멤버에 타입 ..

Java/Java의 정석 2022.03.02

Chapter 11 컬렉션 프레임웍(Collection Framework)

1. 컬렉션 프레임웍 (Collection Framework) 컬렉션: 여러 객체(데이터)를 모아 놓은 것 프레임워 = 라이브러리(기능) + 프로그래밍 방식 프레임워크: 표준화, 정형화된 체계적인 프로그래밍 방식 컬렉션 프레임워크: 데이터 군을 저장하는 클래스들을 표준화한 설계 컬렉션(다수의 객체)을 다루기 위해 표준화된 프로그래밍 방식 컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스 제공 1.1 컬렉션 프레임웍의 핵심 인터페이스 List: 순서가 있는 데이터의 집합, 데이터 중복을 허용 Set: 순서를 유지하지 않는 데이터의 집합, 중복 허용하지 않는다. ex) HashSet, TreeSet Map: 키 - key(중복 허용하지 않는다.)와 값-value(중복 허용)이 쌍으로 이루어진 데이터의집합 ..

Java/Java의 정석 2022.03.02

Chapter 10 날짜와 시간 & 형식화 date, time and formatting

1.날짜와 시간 1.1 Calendar 와 Date - Date -> Calendar(오래 쓰다가 바뀜) -> time - 실무에서는 아직 Calendar을 쓰기도 한다. - Calendar 클래스 -> 추상 클래스(인스턴스 생성 불가)이므로 getInstance() - (static)를 통해 구현된 객체를 얻어야 한다. - Calendar 클래스 - Date와 Calendar 간의 변환 -> Date의 메서드는 대부분 'deprecated-더 이상 사용을 권장하지 않음.'되었지만 여전히 사용한다. "하위 호환성" - 컴퓨터는 항상 시간을 정수로 저장한다. - clear(int field)는 Calendar 객체의 모든(특정) 필드를 초기화한다. -> 1970년 1월 1일 00:00:00 (EPOCH T..

Java/Java의 정석 2022.02.28