일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- VMware
- 캐시
- MongoDB
- 스프링 부트
- 정처기
- 스프링 시큐리티
- sqld
- Redis
- 깃허브
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- spring security
- NoSQL
- 게시판
- 실행 컨텍스트
- 영속성 컨텍스트
- 자바의 정석
- github
- 스프링부트
- JPA
- 동적계획법
- 정보처리기사
- SQL
- document database
- 이벤트루프
- 분할정복
- 호이스팅
- Spring Boot
- 다이나믹프로그래밍
- 레디스
- in-memory
- Today
- Total
목록Language/Java (14)
FreeHand

시작하며예전에 공부하다가 어려워서 그만뒀던 이펙티브 자바를 다시 펼쳐 보려고 한다. 물론 지금 바로 다시 시작하는 건 예전과 다를 게 없다. 당시 어렵다고 느꼈던 이유는 디자인 패턴과 OOP에 대한 이해도가 낮았기 때문이라고 생각한다.그래서 정보처리기사 실기도 준비하고 프로젝트 리팩토링도 할겸 겸사겸사 디자인 패턴을 먼저 가볍게 정리해 볼 생각이다. 디자인 패턴의 종류디자인 패턴은 크게 세 가지로 분류할 수 있다.생성패턴: 객체의 생성에 관여하는 패턴구조패턴: 클래스나 객체의 합성에 관한 패턴행위패턴: 클래스나 객체의 상호작용과 책임을 분산하는 패턴생성구조행위- Factory Method- Singleton- Builder- Prototype- Abstraction Factory- Adapter- Fa..

public class Main { public static void main(String[] args) { // Thread 생성 MyThread1 t1 = new MyThread1(); Thread t2 = new Thread(new MyThread2()); // Thread 실행 t1.start(); t2.start(); } } // Thread 클래스 상속 class MyThread1 extends Thread { public void run() { for (int i=0; i
다양한 데이터 소스(컬렉션, 배열)를 표준화된 방법으로 다루기 위한 것. 스트림 사용법스트림 생성중간 연산(n번): 연산결과가 스트림최종 연산(1번): 연산결과가 스트림이 아님(스트림의 요소를 소모함)//예시 //스트림.중간연산1.중간연산2.중간연산3.최종연산 stream.distinct().limit(5).sorted().forEach(System.out::println) 스트림 특징원본 데이터를 읽기만 가능하고 변경하지 않는다.(Read Only)일회용이다. (필요하면 다시 스트림을 생성해야 한다.)지연된 연산을 한다. (최종 연산 전까지 중간 연산이 수행되지 않는다.)기본형 스트림(IntStream 등)을 제공하여 오토박싱&언박싱 비효율을 없앤다.스트림 작업을 병렬로 처리할 수 있다.스트림 생성컬렉..
단 하나의 추상 메서드만 선언된 인터페이스. // 함수형 인터페이스 @FunctionalInterface interface AddNumber { int add(int x, int y); } // 익명 클래스 AddNumber addNumber1 = new AddNumber() { public int add(int x, int y) { return x + y; } } // 람다식 (함수형 인터페이스 메서드와 람다식의 매개변수 개수와 반환타입이 일치해야 함) AddNumber addNumber2 = (x, y) -> x + y; int result1 = addNumber1.add(5, 10); // 15 int result2 = addNumber2.add(5, 10); // 15 자바에서 람다식은 익명객체이..
일회용 클래스. 정의와 생성을 동시에 함.// 익명 클래스 형태 new 조상클래스() { // 멤버 }class A { public static void main(String[] args) { Button b = new Button("Start"); b.addActionListener(new EventHandler()); // 2. 생성 } } class EventHandler implements ActionListener { // 1. 정의 public void actionPerformed(ActionEvnet e) { System.out.println("ActionEvent occurred"); } }한 번만 사용될 클래스인 EventHandler 클래스를 익명 클래스로 작성하면 아래와 같다.clas..
class A { // 외부 클래스 // 내부 클래스 class B { // 인스턴스 클래스 } static class C { // 스태틱 클래스 } void methodA() { class D { // 지역 클래스 } } } 내부 클래스는 말 그대로 클래스 안의 클래스를 의미한다. class A { int num = 10; } class B { void printA() { A a = new A(); System.out.println(a.num); } } public class Main { public static void main(String[] args) { B b = new B(); b.printA(); // 10 } } B 클래스에서 A 클래스의 멤버를 사용하려면 B 클래스 안에서 A 객체를 생성..

SRP(Single Responsibility Principle, 단일 책임 원칙) - What객체는 하나의 책임만 가져야 한다.여기서 책임이란 "할 수 있는 것" 또는 "해야 하는 것"을 의미한다.- Why하나의 클래스가 너무 많은 책임을 수행한다면 변경에 유리한 코드를 작성하기 힘들다.학생 클래스가 변경될 경우 학생 클래스의 역할을 필요로 하는 다른 코드 역시 변경해야 할 가능성이 높다. - How클래스들이 책임을 적절하게 분담하도록 변경한다.학생 클래스가 모든 책임을 가질 때는 하나의 책임에 변경이 있어도 학생 클래스를 사용하는 다른 클래스들을 다시 테스트해야 한다. 하지만 학생 클래스의 책임을 여러 클래스가 분담하면 해당 책임을 갖는 클래스와 그 클래스를 사용하는 클래스만 영향을 받는다. OCP..

일반화 관계(상속 관계)한 클래스가 다른 클래스를 포함하는 상위 개념일 때를 말한다.자식 클래스는 부모 클래스의 속성과 연산(메서드)를 물려받을 수 있다.public abstract class HomeAppliancies { private int serialNo; private String manufacturer; private int year; public abstract void turnOn(); public abstract void turnOff();}public class Washer extends HomeAppliancies { @Override public void turnOn() { // ... } @O..
- 컴파일시 타입을 체크해주는 기능 - 타입 안정성을 높이고(ClassCastException 예방) 형변환 번거로움을 줄여줌(코드 간결) ClassCastException은 실행시 발생하는 에러로 프로그램이 시작하고 발생하므로 피해야 함 지네릭스는 실행시 발생하는 에러를 컴파일 단계에서 체크하므로 프로그램이 실행하기 전에 컴파일 에러 발생함 ArrayList list = new ArrayList(); list.add(new Tv()); Tv t = (Tv)list.get(0); // Object 타입을 반환하므로 형변환 필요함 /////////////////////////////////////// ArrayList list = new ArrayList(); list.add(new Tv()); Tv t ..