어찌저찌 돌아가는 서비스를 만들었으나 이대로 둔다면 나중에 이 서비스를 유지보수 할 누군가에게 칼침을 당할 수도 있다. 칼침을 맞지 않기 위해 확장성이 좋도록 빠르게 수정하며 알게된 것에 대한 정리 기록. 예전처럼 공들여 글 쓸 시간이 없기 때문에 간단히 샤샥 쓰겠음 1️⃣ Factory Method Pattern : Factory Pattern의 확장 패턴 : 객체를 만들어 내는 부분을 서브 클래스에게 위임하는 패턴 → New 키워드를 호출하는 부분을 서브 클래스에게 위임함 : 추상화 기법을 사용하여 패턴을 확장하여 실제 내용이 구현되지 않은 상태에도 미리 메서드를 호출하여 사용할 수 있다는 장점이 있음 : 추상화를 통해 하위 클래스에 다형성을 부여하기 때문에 코드간의 결합도를 낮추고 유연성있는 코드 ..

🧧 Radis : Radis는 데이터베이스로, 캐시로, 메시지 브로커로 사용되는 in-memory 기반의 Ditionary(key-value) 저장소 : 인메모리의 구조로 디스크에 데이터를 쓰는것이 아니라, 메모리에서 처리하기 때문에 속도가 빠른 장점이 있다. : 다만 용량이 적기 때문에 저장하려는 데이터 셋이 메모리 크기보다 크면 디스크를 써야함 🪙 Cache : 한번 조회된 데이터를 특정 공간에 저장해두고, 똑같은 요청이 발생하였을 때 서버로 요청하지 않고 저장된 데이터를 클라이언트한테 바로 제공해줄 수 있다. (1) Cache hit : 캐시 스토어에 데이터가 있을 경우 바로 가져온다(빠름) (2) Cache miss : 캐시 스토어에 데이터가 없을 경우 DB서버에 요청하여 가져온다(느림) ♟ Ra..

챌린지 팀에서는 서비스팀과 다르게 '성능향상' 이라는 부분을 초점으로 진행해야한다. Java + Spring 걸음마 하고있었는데 어떻게 하면 빨리 걸을 수 있을까? 어떤 부분을 바꿔줘야 뛸 수 있을까? 를 고민하는 격 대량의 데이터를 수집하고 가공하고 사용하는데 있어 사용자가 불편함을 느끼지 않도록 서비스 할 수 있는 방법까지가 우리가 해야할 고민이다. 데이터 수집 후 해야할 고민은 크게 두가지인데 검색 성능 향상과, 부하 및 안정화 부분 인 것 같다. 검색 성능 향상 부분에서 적용할 스택으로 엘라스틱 서치를 먼저 공부해보기로했다. 🌀 Elastic Search 그게 뭔데? ES는 아파치 루썬 기반의 Java 오픈소스 분산 검색 엔진 방대한 양의 데이터를 신속하게 실시간으로 저장, 검색, 분석 할 수 있..

🗝 인터페이스 분리 원칙 (ISP: Interface Segregation Principle)이 뭔데? : 인터페이스 분리 원칙(ISP)은 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙 : ISP를 지킴으로써 큰 덩어리의 인터페이스를 구체적이고 작은 단위로 분리시키며 클라이언트가 꼭 필요한 메서드만 이용할 수 있게 함 인터페이스 분리 원칙이 지켜지지 않은 코드 Vechicle 클래스 : go(), fly() 메서드를 가진 추상 클래스 Aircraft 클래스 : Vehicle 클래스를 상속 Car 클래스 : Vehicle 클래스를 상속 * 자동차는 fly할 수 없기 때문에 fly() 메서드에서 예외를 발생시킴 : 자동차 클래스는 탈것 클래스를 상속받기때문에 기능에 없는 Fly를 구..
몇번을 봐도 추상적인 개념 그것은 바로 추상화 .. 추상클래스 .. 추상 메서드 .... 이걸 쓰는 와중에도 아직 명확하지 않아서 이걸 쓰는게 맞나(?)라는 생각이 들지만 이렇게 계속 부딪히다 보면 언젠가 추상화에 대해서 알게되지 않을까 .. 하는 생각으로 주제를 정했다. 이번 챕터에서는 추상화(abstract)키워드에대해 내용이 나왔는데 보다보니 인터페이스랑 굉장히 비슷?한 것 같다. 🙋🏻 추상클래스 추상클래스는, : 클래스 선언부에 abstract를 붙여서 정의함 : 추상 메서드를 가질 수 없음 : 인스턴스(new ~~)를 생성할 수 없음 ❓ 추상 클래스는 그러면 어떻게 구현하나요 추상메서드는 추상클래스내에서 정의되는 선언부만 있고, 구현 부분이 없는 메서드로 추상 클래스는 '추상적인 형태'만 제안하..

상속과 인터페이스는 블로그 내에서도 한 세번?이상 다룬 것 같은데 아직도 새롭게 이해되는 부분이 있는 걸 보면 아직 제대로 이해 못한 것 같아서 스프링 입문을 위한 자바 객체 지향의 원리와 이해 책에서 이해한 내용을 바탕으로 다시 정리해보려고 한다!. 🐧 상속 객체지향에서 상속을 설명할때 예로 부모 - 자식 관계를 예시로 들며 설명하지만 객체지향에서의 상속은 계층/조직적인 상속 보다는 재사용과 확장으로 이해하는 것이 맞고, 객체지향에서의 상속은 상위 클래스의 특성을 하위 ㅡㅋㄹ래스에서 상속하고, 필요한 특성을 추가 / 확장해서 사용할 수 있다는 의미이다. 객체지향의 상속을 부모-자식의 계층도로 나타내었을때와, 분류도로 나타내었을때의 차이로 보면 위와 같이 분류된다. 상속관계에서 반드시 만족해야하는 문장인..

Chapter 8-1 인터페이스 🔌 인터페이스 : 개발코드와 객체를 서로 통신하는 접점의 역할을 한다. : 개발코드가 인터페이스의 메소드를 호출 👉 인터페이스는 객체의 메소드를 호출 : 프록시 구조라고 생각하면 될 것 같다.! 개발코드는 객체의 내부 구조를 알 필요가 없고, 인터페이스의 메소드만 알고 있으면 된다. ✨ 인터페이스 선언 public interface 인터페이스이름 { ... } : 인터페이스는 객체 사용방법을 정의한것이므로 실행시 데이터를 저장할 수 있는 인스턴스/정적필드를 선언할 수 없다. : 하지만 인터페이스에 고정된 값으로 사용하는 상수 필드는 선언이 가능하다. public static final MAX_VOLUME = 10; 🌀 추상메서드 선언 : 인터페이스를 통해 호출되는 메소드는..

✏️ 프로그램과 프로세스, 스레드 프로그램 : 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태 : 아직 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해주지 않았고, 움직이지 않은 상태라는 뜻 : ex. 윈도우의 *.exe 파일이나 MacOS의 *.dmg 파일 등등 프로세스 : 프로그램을 실행하여 파일이 컴퓨터 메모리에 올라가여 실행중인 상태 : 운영체제로부터 자원을 할당받는 작업의 단위 스레드 : 할당 받은 자원을 이용하는 실행 단위 🔎 프로세스와 스레드 어떤점이 다른데? 이전에는 프로그램 실행시 실행부터 끝까지 프로세스 하나만을 사용해서 진행하였지만 시간이 지날수록 프로그램이 복잡해지고 프로세스 하나만을 이용해 프로그램을 실행시키기 어려워져 더 작은 실행단위의 개념인 ..

Chapter 7.1 상속 👪 1. 상속 : 부모 클래스의 멤버를 자식 클래스가 물려 받는 것을 말한다. : 프로그램에서의 상속은 자식 클래스 선언시 어떤 부모 클래스를 상속받을 것인지 결정한다. class child extends Parents { } // 다중 상속은 불가하여 1 자식 클래스는 1상속만 가능 🛎2. 부모 생성자 호출 : 자식 객체를 생성하면, 부모 객체가 먼저 생성되고 그 다음에 자식 객체가 생성된다. : 부모 생성자는 자식 생성자의 맨 첫줄에서 생성된다. # 부모 클래스 public class People { public String name; public String ssn; } public People(String name, String ssn){ this.name = name;..

Chapter 6-6 패키지 🗂 1. 패키지 패키지란 클래스들의 모음집으로, 많은 클래스들을 체계적으로 관리하기 위해서 클래스를 용도별/기능별로 그룹화 한 것 클래스를 유일하게 만들어주는 식별자 역할을 함 자신만의 패키지 체계를 유지함으로서 서로 다른 패키지에 같은 이름을 가진 클래스가 존재할 수 있다. 패키지 추가 및 선언 클래스의 전체 이름은 "패키지명 + 클래스명" 으로 이루어지는데, 패키지가 상/하위로 구분되어있다면 (.)를 사용해서 표현한다. 상위패키지.하위패키지.클래스 📍 관련 유의사항 하나의 소스파일에는 첫번째 문장으로 단 한번의 패키지 선언만을 허용함 package 패키지명; import 패키지명.클래스명; or import 패키지명.*; // import명은 여러번 선언 가능함! 모든 ..

Chapter 6-5 인스턴스멤버와 정적 멤버 1.1 This와 This()의 차이 This 참조변수 : this는 인스턴스가 자기 자신을 참조하는데 사용하는 변수로, 자신의 객체에 접근할 때 사용된다 : 이러한 this 참조변수는 해당 인스턴스의 주소를 가지고 있다. : 주로 멤버변수와 매개변수의 이름이 동일할때 이를 구분짓기 위해 사용함 🔎 기본형과 참조형 (1) 기본형 : 변수가 값 자체를 보관함 (2) 참조형 : 변수가 값 자체를 보관하는게 아니라 변수가 저장된 영역을 가르킨다. This() 생성자 : This()는 같은 클래스에서 생성자가 다른 생성자를 호출할 때 사용된다 : this() 메소드에 인수를 전달하면, 생성자 중에서 메소드 시그니처가 일치하는 다른 생성자를 찾아 호출해준다. : 주로..

Chapter 6-4 메서드 📌 1. 메서드 메서드는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은것 메서드에는 작업을 수행하는데 필요한 값(입력)과, 반환하는 결과(출력)만 알면 된다. 그래서 메서드를 내부가 보이지 않는 블랙박스라고도 한다. 📒 2. 메서드를 사용하는 이유 (1) 높은 재사용성 - 한번 만들어 둔 메서드는 몇번이고 호출할 수 있으며, 다른 프로그램에서도 사용이 가능함 (2) 중복된 코드의 제거 - 한 프로그램에서 반복적으로 나타나는 문장들을 하나의 메서드로 만들어서 사용하면 코드의 중복이 제거되고, 변경사항이 발생하였을떄도 이 메서드만 수정하면 되므로 유지보수에 용이하고, 오류의 발생 가능성도 낮아진다. (3) 프로그램의 구조화 - main 메서드안에 모든 문장을 넣는 식으로 프로..

오늘 주어진 주특기 입문 과제로 요구조건에 맞는 클래스를 설계하고, 제출하는 과제가 있는데 해당 부분에서 인터페이스를 이용해 '확장에 용이한 형태'로 변경을 하라고 하였다. 그래서 다시금 공부하게 된 인터페이스 📌 1. Java 에서의 인터페이스 사용 목적? 객체지향 5원칙(SOLID) - 인터페이스 분리 원칙 인터페이스 분리 원칙이란, 객체는 자신이 호출하지 않는 메서드에 의존하지 않아야 한다 라는 원칙이다. 부모 클래스에서 모든 교통수단에서 공통적으로 적용이 필요한 기능 + 모든 자식 클래스에서 필요한 기능을 다 생성하고 있을 떄 기능상으로는 문제가 없지만 모든 자식 클래스들은 이 부모 클래스를 상속했기 때문에 좋든 싫든 해당 메소드를 가지고 있어야한다. 하지만 상속 대상인 객체의 메소드를 각 동작별..

Chapter 6-2 . 필드 && Chapter 6-3. 생성자 📌 1. 필드 필드는 객체 고유의 데이터, 객체가 가져가야 할 부품 & 현재 상태 데이터를 저장하는 곳이다. 클래스에 포함된 변수를 의미하며, 객체의 속성을 정의할 떄 사용한다. 필드는 초기값을 주더라도 자동으로 초기화되며, 객체 외부에서 접근 시 객체를 생성하고 참조 변수를 통해 사용해야한다. 🔔 ) 자바에서 변수는 클래스 변수, 인스턴스 변수, 지역 변수가 있는데 이 중 필드라 부르는건 클래스 변수와 인스턴스 변수이다. 클래스 변수와 인스턴스 변수 : - 이 둘은 static 키워드의 유무로 구분하는데 Static 키워드가 함께 선언되면 클래스 변수 / 그렇지 않은 것은 인스턴스 변수이다. class Card { String kind ..

TIL과 별도로 주특기는 스터디로 공부를 진행하기로 하였다. 공부한 내용은 매일매일 정리해서 작성하기 ✏️😎✏️ Chapter 6-1 . 객체지향 프로그래밍 📌 1. 객체 객체(object)는 물리적/추상적인 것 중에서 자신의 속성을 가지고 있으면서 식별이 가능한것을 얘기한다. 객체는 속성/동작으로 구성되어있고, 속성은 필드(F) 동작은 메소드(M)라고 부른다. 사람이라는 현실의 객체를 객체 모델링을 해보면 아래 그림과 같다. 사람은 객체로서 필드(속성)은 이름/나이/성별, 메소드(동작)은 걷다,먹다등으로 나뉘어진다. ✏️ 객체는 각각 독립적으로 존재하고, 다른 객체와의 상호작용을 한다. ㄴ 이때 객체가 다른 객체의 기능을 이용하는것을 메소드 호출이라고 함 #메소드 호출 moving = human.run..