📑 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의 값을..
print Python에서 print는 언어의 실행을 알아내기 위해 사용하는 문법 중 하나입니다. 결괏값에 내가 원하는 값을 출력하는 것을 알 수 있어서, print의 활용은 매우 중요한 기술 중 하나라고 볼 수 있습니다. 여기서 print의 숨겨진 기능 중 하나가 있는데, 그것은 print가 종료 시 강제로 개행된다는 부분입니다. 여기서 다음과 같이 두 개의 print 함수를 이용했다고 가정을 하겠습니다. 위의 출력되는 알파벳은 기본 두줄로 출력이 될 예정입니다. print가 두 번 사용했기 때문에, 두 줄이 나온다는 것은 어느 순간 당연하게 받아들이고 있습니다. 그래서 그 숨겨진 기능을 활용하는 방법을 알려드리려고 합니다. print안에 end 이용하기 Python의 print가 한 줄로 출력되는 것..
함수 사용하기 #함수 만들기 def fn(): print('fn 실행') #함수 실행 fn() 함수 사용방법은 'def'를 이용하면 됩니다. 함수란, 동일한 코드실행을 한 곳에 모아 정리한 것과 같습니다. 매일 같이 하는 행동, 습관 등 컴퓨터 코드 또한 동일한 반복작업이 이루어질 때가 있습니다. 그때 사용하는 것이 함수입니다. '시작' 버튼을 누르면 함수 안의 코드가 실행되는 원리이며, 같은 코드를 반복해서 작성할 필요 없이 한 번의 작업으로 여러 번의 재활용으로 코드구현의 실용성을 높일 수 있는 방법입니다. 또한 코드의 가독성 또한 높아지게 됩니다. 🌮 또 다른 예시 def returnTest(): return "return" print(returnTest()) 함수 안에 return을 하게 될 경우..
반복문 사용방법 # list 변수 생성 list = ['apple','banana', 'cocoa', 'orange', 'dalgona', 'cleanse'] print(list) 반복문을 사용하기 앞서 2장의 List를 만들었습니다. 반복문의 사용예시에 가장 적합하며, 반복문을 사용하는 대표적인 이유 중 하나이기 때문입니다. # for문 2 (java의 foreach문) for index in list: print(index) 배열을 통해 반복문을 사용하는 방법은 다음과 같습니다. index는 배열의 index와 동일한 의미이며, in 뒤에 있는 리스트에 원하는 배열(문자열)을 넣으면 됩니다. 실행 결과는 다음과 같습니다. 준비된 배열에 맞게, 배열의 크기만큼 잘 실행된 모습을 볼 수 있습니다. 언어에..
조건문 사용하기 if num < 10: print('true 입니다.') elif num < 20: print('elif 입니다.') else: print('false 입니다.') Python은 if의 조건을 구분하기 위해서 들어쓰기를 사용합니다. Python은 if, elif, else를 사용합니다. 조건문의 조건을 입력 완료 후, 클론 : 을 입력해야 합니다. Ture와 Flase if True: print('강제 실행인가') else: print('너는 실행되니') Python의 Bool Type의 값은 반드시 대문자를 사용해야 합니다. True, False if안의 조건이 참일 경우에만 실행 됩니다. 논리연산자 사용 if 10 < num and 90 < num2: print('and 조건') if..