📑 Proxy 소개구조 디자인 패턴이다.어떤 객체에 대한 접근을 제어하거나 기능을 확장하려고 할 때 사용클라이언트가 객체를 직접 사용하는 대신에 Proxy라는 대리자를 통해 객체에 접근하도록 만든다.실제 객체와 같은 인터페이스를 구현함으로써, 클라이언트가 실제 객체와 동일하게 Proxy 를 사용할 수 있게 해 준다.Proxy 는 실제 객체의 생성과 관리, 생명주기를 관리하거나, 접근을 제어하며, 요청을 가로채 추가적인 행동을 수행하고 나서 실제 객체로 요청을 전달. 📝 구성 요소요소설명Subject ( 주제 )실제 객체와 Proxy 객체가 구현해야 하는 인터페이스클라이언트는 Proxy를 실제 객체처럼 사용할 수 있다.Real Subject ( 실제 주제 )Proxy가 대신하여 요청을 처리하는 실제..
📝 State 정리행동 패턴 디자인입니다.객체의 내부 상태가 변경될 때마다 객체의 행동을 변경할 수 있도록 합니다.객체의 상태를 클래스로 캡슐화합니다.상태에 따라 동일한 작업을 다르게 처리할 수 있습니다.코드의 유지보수를 용이하게 만들 수 있고, 객체 지향 원칙에 보다 잘 부합하게 해 줍니다. 디자인패턴 중, 가장 잘 나오는 기능 중 하나는 동적바인딩입니다.동적바인딩을 사용하는 이유에는 대표적으로 Strategy와 Command 패턴이 있다고 생각됩니다. (Strategy) 전략적으로 사용할 것인지, (Command) 여럿 선택 중 하나를 선택할 것인지에 대한 선택입니다.여기서, 동적바인딩을 Main에서 굳이 할 필요가 있을까?동적바인딩으로 인해서, Main의 코드가 길어지는 모습을 볼 수 있습니다...
💭 Command 패턴이란?행동 디자인 패턴이다.요청을 객체의 형태로 캡슐화하여 사용자가 요청을 보내는 측과 요청을 수행하는 측을 분리하는 패턴요청 실행, 취소, 로깅, 트랜잭션 등의 기능등 확장이 가능하다.복잡한 명령 시퀀스나 작업을 관리할 때 매우 유용하다. Command 패턴은 디자인 패턴 중 가장 어려웠던 패턴 중 하나였습니다. 그 이유가 왜 굳이 이렇게까지 분리를 해야 하는가???라는 부분에서 시작했습니다. 얼핏 봤을 때는 Strategy패턴과 유사하면서도 또 다르게는 이렇게 비효율적으로 코드를 만들어야 하는 이유를 몰라서였습니다. 먼저 Command 패턴의 구성요소를 먼저 소개해드리겠습니다. 💭 구성요소 요소 설명 Command 명령을 나타내는 인터페이스 명령을 실행하는데 필요한 메서드 exe..
📋 전략 패턴객체의 행동으로 캡슐화알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경 가능한 행동패턴동일 계열의 알고리즘군을 정의각 알고리즘을 별도의 클래스로 캡슐화이들을 서로 교체 가능하도록 만든다.클라이언트와 알고리즘 자체의 구현 사이의 결합도를 최소화 전략 패턴이란, 서울에서 부산에 간다고 가정을 했을 때 우리가 선택할 수 있는 방법은 다양할 수 있습니다.버스, 기차, 자전거 등 여러 가지가 존재합니다. 여기서 비용을 최소화 한다면 자전거를 탈 것이고, 시간을 최소화한다면 기차를 탈 것입니다.이 처럼 상황에 따라서 사용하는 객체가 달라질 수 있는데 이를 Strategy 패턴이라고 부릅니다. 💭 구성 요소 요소설명Context ( 문맥 )전략을 사용하는 역할전략을 이용하여 특정 작업..
🍀 SingleTon객체 지향 프로그래밍에서 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 디자인 패턴이다.이 패턴을 사용할 시, 전역 변수를 사용하지 않고도 객체에 전역적으로 접근이 가능해진다.시스템 전체에 걸쳐 특정 지원에 대한 일관된 접근을 제공 하는데 유용 🧑💻 코드보기Singleton.classpublic class Singleton { //private 정적 인스턴스 private static Singleton instance; // private 생성자 private Singleton() {}; //public method public static Singleton getInstance() { if(instance == null..
🍁 중첩 클레스✔️ class안에 class를 의미한다.✔️ class 안에 class가 있어서 Inner Class라고도 부르기도 한다. 🍁 중첩 클레스 종류분류설명인스턴스 멤버 클레스A 객체가 선언 되었을 때, 그 안의 B객체가 존재한다.A 객체에 접근하고 B 객체에 접근할 수 있다.정적 멤버 클레스A 객체와 상관없이 B 객체가 이미 만들어져 있다. ( static )A 객체에 접근하지 않아도 B 객체에 접근할 수 있다.로컬 클레스A 객체 안의 method 혹은 생성자에서 B 객체에 접근할 수 있다. ✔️ 중첩 클레스에서 먼저 파악할 것은 '멤버'라는 명칭이다. class 안의 class를 의미한다. 우리가 생각하는 Inner Class이다. 여기에는 익명 클레스도 존재하지만, 이는 다음장에서..
상속일상속에서의 상속이란, 부모의 것을 물려받는다라는 의미를 지녔습니다. 그러면 JAVA 프로그래밍 속에서의 상속이란 무엇일까요? 사진처럼 고양이와 강아지가 있습니다.두 마리의 동물은 서로 다른 개성으로 가진 동물로 유명합니다. 그러나 이 둘의 공통점이 존재합니다.그것은 이 두 마리는 동물이라는 점 입니다. 그럼 저희는 이를 동물Class로 생성하게 됩니다.class 동물 { String name; public void print() { System.out.println("울음 소리"); }}그런데, 동물 Class는 고양이와 강아지라는 것을 정의할 수는 있으나 이를 강아지class와 고양이class라고 정의하기는 어렵습니다. 왜냐하면, 어디까지나 동물class를 빌려 쓴 고양이와 강아지이기 때..
Java 설치하기Java는 현재 많이 사용되는 언어 중 하나이다.이를 설치하기 위해서는 아래의 링크를 통해서 설치하면 된다. https://www.oracle.com/kr/java/technologies/downloads/ Download the Latest Java LTS FreeSubscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.www.oracle.com링크를 통해서 java를 설치할 수 있다.현재 24년 기준, Java의 최신판이 바로 보이는 것을 확인할 수 있다. 여기서 현재와 거리가 먼 과거의 버전이 필요하다면 스크롤 아래로 이동하면 과거의 ..
문자열 Java에서 String 타입형을 사용하여 나타내는 변수를 뜻합니다. String은 자료형에 속하지는 않지만, 가장 많이 사용하는 변수타입 중 하나입니다. 우리는 이를 이용하여 문장을 꾸미려고 합니다. 좋은 인용문 하나를 도용하여 만들어보게 되었습니다. 이 문장을 갖고 테스트를 진행해 보도록 하겠습니다. 문자열 변환하기 1. 문자열 대, 소문자 변환 method comment .toUpperCase() 문자열을 모두 대문자로 변환한다. .toLowerCase() 문자열을 모두 소문자로 변환한다. 대, 소문자로 변환하기 위해서는 다음과 같은 함수를 사용합니다. 해당 함수를 통해서 변수안의 값이 모두 대, 소문자로 변경된 것을 확인할 수 있었습니다. 2. 문자열 안의 문장 찾기 type comment..
정수 자료형 type memory size 범위 byte 1 byte -128 ~ 127 short 2 byte -32,768 ~ 32,767 int 4 byte -2,147,483,648 ~ 2,147,483,647 long 8 byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 각 정수마다 표현할 수 있는 정수의 크기가 존재합니다. 옛날에는 한정된 하드의 공간을 확보하기 위해 많은 것을 따졌지만, 현재에는 고사양 된 PC에 따라서 int를 기본으로 사용하고 있습니다. ✔️ long을 사용할 때는 값 뒤에 L을 붙여야 한다. ✔️ 소문자 'l'도 사용할 수 있지만, 숫자 '1'과 구분하기가 어려워 'L' 사용을 지향한다. 2진수, 8진수, 16진수..
String 오늘은 Java에서 가장 많이 사용하면서, String에 대해서 재밌는 이야기를 하고 넘어가려고 합니다. String은 Java라는 언어에서 사용하는 타입 중 하나로 알려져 있습니다. 대표적으로 문자열을 담는 (객체) 타입 입니다. 그런데 여기서 String은 Value를 담는 타입 중에서 유일하게 객체를 형성하고 있습니다. 그 이유와 그 기능에 대해서 설명드리려고 합니다. Java 문자열 비교 ==와 equals()의 차이점 우리가 String을 배울 때, 하는 말이 있습니다. String에 들어간 'Value를 비교할 때는 반드시 equals 함수를 사용해라!'입니다. 그 이유는? '=='는 reference의 주소값을 비교할 때 사용하는 연산자이고 equals는 reference의 값을..
음수의 이야기 Java에서 int를 소개하려고 한다. int는 Java에서 정수를 나타내는 대표적인 타입 중 하나로 4Byte의 크기와 약 21억에 가까운 숫자표현을 할 수 있다는 장점이 있다. 그 중, 우리는 정수중에서 음수에 대해 알아보려고 한다. int에서 음수를 구분하는 방법 int의 가장 큰 특징은 32bit를 사용한다는 점이다. 그 중, 맨 앞자리는 양수와 음수를 구분하는 것으로 표현한다. 맨 앞이 1일 경우, 음수. 0일 경우, 양수. 그래서 양수 5와 음수 5를 비교했을 때, 결과값은 서로 다르게 나오는 것을 확인할 수 있다. 이 점을 알았을 때, 단순히 앞자리가 1로만 바뀌는 것을 알 수 있었다. 쉬프트 연산자 이용할 경우 여기서 재밋는 부분은 쉬프트 연산자를 사용했을 때 더 알 수 있었..
상속 Java의 대표적인 기능 중 하나이다. Class 내의 함수 혹은 필드를 그대로 다른 Class에게 전달하는 의미이다. 물건을 다른 사람에게 전달해주듯 변수명, 함수명을 같이 사용할 수 있도록 한다. class TestA { void testA() { System.out.println("testA의 전유물"); } } class TestB extends TestA { void testB() { System.out.println("testB의 전유물"); } } public class ExtendStudy { public static void main(String[] args) { TestB testB = new TestB(); testB.testA(); testB.testB(); } } TestB의..
Java, 셀레니움 설치하기 셀레니움 이란? 현재 서비스 중인 웹 사이트의 html 코드를 긁어오기 위한 언어 중 하나이다. HTML 코드는 Value값이 변하더라도, 정해진 html 안에서 코드의 결과가 발생된다. 그래서 해당되는 태그 안의 결괏값을 가져와서 마치 자신의 데이터처럼 가져오는 기술이다. 일반적으로 허용되는 기술이 아닌만큼, 사용할 때는 다른 서버에 부담되지 않도록 조심해야 한다는 단점 또한 있다. 셀레니움은 제이숲과 비슷하게 사용하지만 최근 FrontEnd의 기술이 발달된 만큼 동적 페이지가 많아지고 그로 인해서 jsoup이 불러오지 못하는 html이 많아지기에 셀레니움을 선호하기도 한다. Selenium 라이브러리 설치하기 https://www.selenium.dev/downloads/..
Java, FCM Push 전송하기, json Version Java에서 APK Push 전송하기 import org.json.simple.JSONObject; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public class FCMessage { // FCM에서 가입 후 받는 키값 public final static String AUTH_KEY_FCM = "TOKEN을 보내기 위한 KEY 값, ANDORID ID에 KEY 값이 있다."; public final static Stri..