From 56b8699882aff16d66689e256034432d487aa269 Mon Sep 17 00:00:00 2001 From: jeongyuneo Date: Mon, 28 Dec 2020 15:51:35 +0900 Subject: [PATCH 01/11] MODIFY --- test | 1 + 1 file changed, 1 insertion(+) create mode 100644 test diff --git a/test b/test new file mode 100644 index 00000000..bdf08de0 --- /dev/null +++ b/test @@ -0,0 +1 @@ +test file \ No newline at end of file From 8aba458a28665e47a0bfcc8b061594c80b5b6fb7 Mon Sep 17 00:00:00 2001 From: jeongyuneo Date: Mon, 11 Jan 2021 19:38:56 +0900 Subject: [PATCH 02/11] =?UTF-8?q?docs:=20test=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test | 1 - 1 file changed, 1 deletion(-) delete mode 100644 test diff --git a/test b/test deleted file mode 100644 index bdf08de0..00000000 --- a/test +++ /dev/null @@ -1 +0,0 @@ -test file \ No newline at end of file From d20587a6e6c6d4816e55eb579763c40965d99e54 Mon Sep 17 00:00:00 2001 From: jeongyuneo Date: Sun, 24 Jan 2021 22:19:13 +0900 Subject: [PATCH 03/11] =?UTF-8?q?docs:=20=EC=9E=90=EB=B0=94=20=EA=B8=B0?= =?UTF-8?q?=EC=B4=88.md=20=EC=97=85=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\353\260\224 \352\270\260\354\264\210.md" | 306 ++++++++++++++++++ 1 file changed, 306 insertions(+) create mode 100644 "4\354\243\274\354\260\250/\354\236\220\353\260\224 \352\270\260\354\264\210.md" diff --git "a/4\354\243\274\354\260\250/\354\236\220\353\260\224 \352\270\260\354\264\210.md" "b/4\354\243\274\354\260\250/\354\236\220\353\260\224 \352\270\260\354\264\210.md" new file mode 100644 index 00000000..5b43ae44 --- /dev/null +++ "b/4\354\243\274\354\260\250/\354\236\220\353\260\224 \352\270\260\354\264\210.md" @@ -0,0 +1,306 @@ +# [Java] Java 기초(3) +연산자란 하나, 둘 혹은 세 개의 피연산자에 대해서 특정 연산을 수행한 후 **결과를 반환**하는 기호이다. + +간단히 말해 **'연산을 수행하는 기호'**이다. + +피연산자는 **연산의 대상**이라고 할 수 있다. 리터럴이 될 수도 있고, 변수가 될 수도 있으며, 또 다른 식이 될 수도 있다. + +식은 연산자와 피연산자를 조합한 것이고, 이를 수행한 것을 평가한다고 한다. + +> 연산은 식을 평가하고 식의 평가 결과를 반환하는 것 + +## 1. 산술 연산자 +산술 연산자는 우리가 흔히 말하는 더하기, 빼기, 곱하기, 나누기를 수행하는 연산자이다. + +|연산자|설명| +|:---:|---| +|+|더하기 연산자(문자열 연결에도 사용)| +|-|빼기 연산자| +|* |곱하기 연산자| +|/|나누기 연산자| +|%|나머지(모듈로) 연산자| + +```java +int result = 1 + 2; +System.out.println("1 + 2 = " + result); // 3 + +int originalResult = result; +result = originalResult - 1; +System.out.println(originalResult + " - 1 = " + result); // 2 + +originalResult = result; +result = originalResult * 7; +System.out.println(originalResult + " * 7 = " + result); // 14 + +originalResult = result; +result = originalResult / 3; +System.out.println(originalResult + " / 3 = " + result); // 4 + +result = originalResult % 3; +System.out.println(originalResult + " % 3 = " + result); // 2 + +double doubleResult = 14.0 / 3.0; +System.out.println("14.0 / 3.0 = " + doubleResult); // 4.66667 + +doubleResult = 14.0 % 3.0; +System.out.println("14.0 % 3.0 = " + doubleResult); // 2.0 + +doubleResult = 14.0 / 0.0; +System.out.println("14.0 / 0.0 = " + doubleResult); // Infinity + +doubleResult = -14.0 / 0.0; +System.out.println("14.0 / 0.0 = " + doubleResult); // -Infinity + +doubleResult = 14.0 % 0.0; +System.out.println("14.0 % 0.0 = " + doubleResult); // NaN + +doubleResult = -14.0 % 0.0; +System.out.println("14.0 % 0.0 = " + doubleResult); // NaN + +try { + result = 14 / 0; // ArithmeticException: / by zero +} catch (ArithmeticException e) { + System.out.println("14 / 0 = " + e.getMessage()); +} + +try { + result = 14 % 0; // ArithmeticException: / by zero +} catch (ArithmeticException e) { + System.out.println("14 % 0 = " + e.getMessage()); +} +``` + +정수형일 때 0으로 나누거나 모듈로 연산을 수행하는 것을 조심해야 한다. 이는 런타임에 발생하는 오류이기 때문에 컴파일타임에 확인할 수 없다. + +또한 자료형의 크기에 따른 오버플로우도 조심해야 한다. + +실수형은 연산 과정 자체에서 오차가 발생할 수 있으며 이를 조심해야 한다. 이는 특히 테스트 코드를 작성할 때, 어느 정도의 오차를 허용할 것인지 반드시 설정해주어야 하는 이유이다. + +실수형은 0으로 나누거나 모듈로 연산을 사용하면 위와 같이 ```Infinity```, ```-Infinity```, ```NaN``` 값을 가진다. +(```Infinity```와 ```NaN```이 피연산자인 경우도 존재) + +### 1-1. 단항 연산자 +```+```를 붙이면 양수 값을 나타낸다. (생략 가능) +```-```를 붙이면 음수 값을 나타낸다. + +### 1-2. 증감 연산자 +```++```를 붙이면 값을 1씩 증가시킨다. +```--```를 붙이면 값을 1씩 감소시킨다. +```++```, ```--```는 오른쪽에 위치하는 경우 식을 평가하기 전에 증가시키고, 왼쪽에 위치하는 경우 식을 평가한 후에 증가시킨다. + +```java +int result = 1; +System.out.println(result); // 1 + +result--; +System.out.println(result); // 0 + +result++; +System.out.println(result); // 1 + +for (int i = 0; i < 3; i++) { + System.out.println(++result); // 2, 3, 4 +} + +System.out.println(result); // 4(이미 이전에 증가해서 그대로 출력된다.) + +for (int i = 0; i < 3; i++) { + System.out.println(result++); // 4, 5, 6 +} + +System.out.println(result); // 7(마지막에 증가한다.) +``` +> 증감 연산자가 앞에 오면 먼저 증가/감소시키고, 대입 후 계산 +> 증감 연산자가 뒤에 오면 먼저 대입시키고, 계산 후 증가/감소 + +## 2. 비트 연산자 +Java에서는 정수 타입에 대해서 비트와 시프트 연산을 제공하는데 이를 비트 연산자라고 한다. + +우리가 사용하는 정수 타입을 컴퓨터가 이해할 수 있도록 이진수 형식으로 표현된다. 이 이진수 조각 하나 하나를 비트라고 표현하고, 비트 연산은 각 비트마다의 연산을 수행한다. + +```~```는 ```NOT``` 연산으로, 비트를 반전시키는 단항 연산자이다. +```&```는 ```AND``` 연산으로, 피연산자들의 비트별로 ```AND``` 연산을 수행하게 된다. +```|```는 ```OR``` 연산으로, 피연산자들의 비트별로 ```OR``` 연산을 수행하게 된다. +```^```는 ```XOR``` 연산으로, 피연산자들의 비트별로 ```XOR``` 연산을 수행하게 된다. + +|x|~x| +|:---:|:---:| +|0|1| +|1|0| +
+ +|x|y|x \| y|x & y|x ^ y| +|:---:|:---:|:---:|:---:|:---:| +|1|1|1|1|0| +|1|0|1|0|1| +|0|1|1|0|1| +|0|0|0|0|0| + +```java +// 참고로 부호비트도 고려해야 합니다. +byte a = 0b00001010; // 10 (0|0001010) +byte b = 0b00101000; // 40 (0|0101000) +byte c = -0b00001010; // -10 (1|1110110) + +// ~ 연산자(1의 보수를 만들어줌) +System.out.println(~a); // 1|1110101 => -11 여기에 1을 더하면 -10이 됩니다.(2의 보수) +System.out.println(~c); // 0|0001001 => 9 여기에 1을 더하면 10이 됩니다. + +// & 연산자 +System.out.println(a & b); // 0|0001000 => 8 +System.out.println(a & c); // 0|0000010 => 2 +System.out.println(b & c); // 0|0100000 => 32 + +// | 연산자 +System.out.println(a | b); // 0|0101010 => 42 +System.out.println(a | c); // 1|1111110 => -2 +System.out.println(b | c); // 1|1111110 => -2 + +// ^ 연산자(다른 경우에만 1) +System.out.println(a ^ b); // 0|0100010 => 34 +System.out.println(a ^ c); // 1|1111100 => -4 +System.out.println(b ^ c); // 1|1011110 => -34 +``` + +### 2-1. 시프트 연산자 +시프트 연산자는 피연산자의 각 비트를 오른쪽(```>>```) 또는 왼쪽 (```<<```)으로 이동시키는 연산자이다. + +```<<``` 연산자의 경우 빈 칸을 0으로 채우면 되지만, ```>>``` 연산자는 음수일 때는 1로, 양수일 때는 0으로 빈칸을 채운다. + +> ```x << n``` 연산은 x * 2n과 같다. +> ```x >> n``` 연산은 x / 2n과 같다. + +이를 사용하는 이유는 비트 연산이 일반 산술 연산보다 속도가 빠르기 때문이다. 하지만 가독성이 떨어지므로 성능 개선이 필수적인 부분에서만 사용해야 한다. + +Unsigned Right 시프트 연산자(```>>>```)는 오른쪽으로 이동하되, 빈칸을 0으로 채운다. + +## 3. 관계 연산자 +관계 연산자는 피연산자가 같은지(```==```), 같지 않은지(```!=```), 큰지(```>```), 크거나 같은지(```>=```), 작은지(```<```), 작거나 같은지(```<=```) 비교하는 연산자들이다. + +연산 결과가 맞으면 true, 틀리면 false로 boolean 타입을 반환한다. + +```java +System.out.println(a == b); // false +System.out.println(a != b); // true +System.out.println(a > b); // false +System.out.println(a >= b); // false +System.out.println(a < b); // true +System.out.println(a <= b); // true +``` +> 문자열의 동등성을 비교할 때에는 ```equals()``` 메소드를 사용해야 한다. + +## 4. 논리 연산자 +논리 연산자는 피연산자로 boolean 값을 받으며, 이는 평가의 결과가 될 수도 있다. + +```&&``` 연산자는 두 연산결과가 참인지 판단한다. 만약 둘 중 하나라도 거짓이라면 거짓을 반환한다. 만약, 왼쪽의 피연산자가 거짓이라면 오른쪽의 피연산자는 평가하지 않는다. +```||``` 연산자는 두 연산결과 중 한 쪽만 참이어도 참을 반환한다. 만약, 왼쪽의 피연산자가 참이라면 오른쪽의 피연산자는 평가하지 않는다. +```!``` 연산자는 피연산자를 하나만 받는 단항 연산자이며, true를 false로, false를 true로 변경한다. 식의 평가 방향은 오른쪽에서 왼쪽이다. + +위에서 말한 평가하지 않는 것을 **short circuit evaluation**이라고 하며, 식의 평가를 수행하지 않기 때문에 좀 더 빠른 결과를 얻을 수 있다. + +## 5. instanceof +```instanceof``` 연산자는 타입 비교 연산자이다. 이를 이용해 객체가 클래스의 인스턴스, 하위 클래스의 인스턴스 또는 특정 인터페이스를 구현하는 클래스의 인스턴스인지 테스트할 수 있다. + +```java +public class Main { + + public static void main(String[] args) { + Animal animal1 = new Animal(); + Animal animal2 = new Cat(); + + System.out.println("animal1 is instanceof Animal: " + (animal1 instanceof Animal)); // true + System.out.println("animal1 is instanceof Cat: " + (animal1 instanceof Cat)); // false + System.out.println("animal1 is instanceof Meowable: " + (animal1 instanceof Meowable)); // false + + System.out.println("animal2 is instanceof Animal: " + (animal2 instanceof Animal)); // true + System.out.println("animal2 is instanceof Cat: " + (animal2 instanceof Cat)); // true + System.out.println("animal2 is instanceof Meowable: " + (animal2 instanceof Meowable)); // true + } +} + +class Animal {} +interface Meowable {} +class Cat extends Animal implements Meowable {} +``` + +## 6. assignment(=) operator +할당 연산자(```=```)는 연산자 오른쪽의 값을 연산자 왼쪽의 피연산자에 할당한다. 식의 평가 방향은 오른쪽에서 왼쪽이다. + +```int x = 0;``` +위와 같은 연산자는 ```x```라는 이름을 가진 변수 공간에 0이라는 ```int```형 리터럴을 할당한다. + +또한, 객체도 할당할 수 있다. + +```Animal animal = new Cat();``` +위와 같은 식은 ```animal```이라는 ```Animal``` 타입 참조 변수에 새로 만들어진 ```Cat``` 인스턴스의 참조를 할당한다. + +할당할 수 없는 리터럴과 같은 값은 왼쪽 피연산자가 될 수 없다. + +### 6-1. 복합문(Compound Statement), 복합 할당(Compond Assignment) +다른 연산자와 할당 연산자를 결합한다. + +```a = a + 1;``` 이라는 식의 경우 ```a```가 중복된다. 이를 간단히 나타내기 위해 ```a += 1;```로 표현할 수 있다. + +|대입 연산자|기능| +|:---:|---| +|=|왼쪽의 피연산자에 오른쪽 피연산자 대입| +|+=|왼쪽의 피연산자에 오른쪽의 피연산자를 더한후, 그 결과 값을 왼쪽의 피연산자를 대입| +|-=|왼쪽의 피연산자에 오른쪽의 피연산자를 뺀후, 그 결과 값을 왼쪽의 피연산자를 대입| +|*=|왼쪽의 피연산자에 오른쪽의 피연산자를 곱한후, 그 결과 값을 왼쪽의 피연산자를 대입| +|/=|왼쪽의 피연산자에 오른쪽의 피연산자를 나눈후, 그 결과 값을 왼쪽의 피연산자를 대입| +|%=|왼쪽의 피연산자에 오른쪽의 피연산자를 나눈후, 그 나머지 값을 왼쪽의 피연산자를 대입| +|&=|왼쪽의 피연산자에 오른쪽의 피연산자와 비트 & 연산후, 그 결과 값을 왼쪽의 피연산자를 대입| +|\|=|왼쪽의 피연산자에 오른쪽의 피연산자와 |연산후, 그 결과 값을 왼쪽의 피연산자를 대입| +|^=|왼쪽의 피연산자에 오른쪽의 피연산자와 ^연산후, 그 결과 값을 왼쪽의 피연산자를 대입| +|<<=|왼쪽의 피연산자에 오른쪽의 피연산자만큼 왼쪽 시프트 후, 그 결과 값을 왼쪽의 피연산자를 대입| +|>>=|왼쪽의 피연산자에 오른쪽의 피연산자만큼 부호 유지 오른쪽 시프트후, 그 결과 값을 왼쪽의 피연산자를 대입| +|>>>=|왼쪽의 피연산자에 오른쪽의 피연산자만큼 부호에 상관없이 오른쪽 시프트 후, 그 결과 값을 왼쪽의 피연산자를 대입| + +## 7. 화살표(->) 연산자 +화살표 연산자는 Java8에서 추가된 람다 표현식의 한 부분이다. + +```(파라미터) -> { 함수몸체 }``` 형태로 작성한다. + +람다 표현식은 함수형 프로그래밍에서 가장 중요한 부분 중 하나이며, 이를 도입함으로써 Java는 함수형 언어로도 기능하게 되었다. 이는 일부 익명 클래스를 간단히 표현할 수 있는 방법이라고도 볼 수 있다. +또한 ```@FunctionalInterface``` 어노테이션을 붙인 인터페이스의 구현체로도 사용할 수 있다. + +IntelliJ에서는 이런 람다 표현식으로 코드를 변경시켜주는 기능이 내장되어 있다. + +람다식은 메소드가 매개변수로 전달되는 것이 가능하고, 결과로 반환되는 것도 가능하게 해준다. + +## 8. 삼항 연산자 +```? :```는 논리 연산자의 일종으로 피연산자 세 개를 받는 유일한 연산자여서 삼항 연산자로 많이 불린다. +이는 ```if-else```문과 비슷하게 보이며, 한 줄로 간단하게 표현할 수 있다. + +```조건 ? 참일 때 값 : 거짓일 때 값```의 표현으로 사용한다. + +## 9. 연산자 우선 순위 +연산자 우선 순위는 식을 평가할 때 많은 영향을 미친다. 우선 순위에 따라서 의도한 대로 프로그램이 동작하지 않을 수 있기 때문이다. + +아래 표는 연산자의 우선순위를 나타낸 표이다. 상단에 가까울 수록 우선순위가 높으며, 같은 줄의 연산자는 동일한 우선순위를 가진다. 이런 경우 식의 평가순서가 영향을 미치게 된다. 할당 연산자를 제외한 모든 이항 연산자는 왼쪽에서 오른쪽으로 평가되며, 할당 연산자는 오른쪽에서 왼쪽으로 평가한다. + +![](https://images.velog.io/images/minide/post/e217f152-0888-4790-9201-1d2459872f8c/%EC%97%B0%EC%82%B0%EC%9E%90%20%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84.png) + +실제 프로그래밍을 할 때는 헷갈릴 가능성이 높으므로 ```()```로 먼저 수행하고 싶은 식을 묶어주는 것이 가독성 등의 여러 관점에서 더 좋다. + +## 10. switch 연산자 +기존 switch문에서는 다수의 ```case```와 ```break```가 존재하게 된다. ```break```를 빼먹을 경우 다음 분기로 넘어가고, return값이 존재할 수 없다. + +switch 연산자에서는 ```break```를 사용하지 않아도 된다. ```yield``` 예약어를 사용해 값을 return 할 수 있다. +```case -> A```와 같이 표현하거나 ```break``` 대신 ```yield```로 return 값을 반환해주도록 표현한다. +```java +switch(expression){ + case expression -> expression; + ... + default -> expression +}; + +switch(expression){ + case expression: + expression; + yield expression; + ... + default: + expression; + yield expression; +}; \ No newline at end of file From b28de8fbc65aa84c2c942463f90f4b7045f9a708 Mon Sep 17 00:00:00 2001 From: jeongyuneo Date: Sun, 24 Jan 2021 22:20:07 +0900 Subject: [PATCH 04/11] =?UTF-8?q?docs:=20=EA=B0=9D=EC=B2=B4=20=EC=A7=80?= =?UTF-8?q?=ED=96=A5-=EC=97=AD=ED=95=A0,=20=EC=B1=85=EC=9E=84,=20=ED=98=91?= =?UTF-8?q?=EB=A0=A5.md=20=EC=97=85=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\354\236\204, \355\230\221\353\240\245.md" | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 "4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" diff --git "a/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" "b/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" new file mode 100644 index 00000000..6c3c7cb2 --- /dev/null +++ "b/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" @@ -0,0 +1,90 @@ +# [Java] 객체 지향 +## 1. 객체 지향이란 +객체지향의 목표는 실세계를 모방하는 것이 아닌 새로운 세계를 창조하는 것이다. + +객체를 스스로 생각하고 스스로 결정하는 현실 세계의 생명체에 비유하는 것은 상태와 행위를 **'캡슐화'**하는 소프트웨어 객체의 **'자율성'**을 설명하는 데 효과적이다. 현실 세계의 사람들이 암묵적인 약속과 명시적인 계약을 기반으로 목표를 달성해 나가는 과정은 **'메시지'**를 주고받으며 공동의 목표를 달성하기 위해 **'협력'**하는 객체들의 관계를 설명하는 데 적합하다. + +객체지향이란 +- 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다. +- 자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다. +- 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할을 관련된 책임의 집합이다. +- 객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메소드를 자율적으로 선택한다. + +## 2. 객체 지향의 이해 +### 2-1. 역할 +역할은 관련성 높은 책임의 집합이다. 객체의 역할은 사람의 역할과 유사하게 다음과 같은 특징을 가진다. +- 여러 객체가 동일한 역할을 수해할 수 있다. +- 역할은 개체 가능성을 의미한다. +- 각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있다. +- 하나의 객체가 동시에 여러 역할을 수행할 수 있다. + +역할은 협력 내에서 다른 객체로 대체할 수 있음을 나타내는 일종의 표식이다. 협력 안에서 역할은 "이 자리는 해당 역할을 수행할 수 있는 어떤 객체라도 대신할 수 있습니다."라고 말하는 것과 같다. + +역할을 대체하기 위해서는 각 역할이 수신할 수 있는 메시지를 동일한 방식으로 이해해야 한다. + +역할은 객체지향 설계의 **단순성**, **유연성**, **재사용성**을 뒷받침하는 핵심 개념이다. + +역할의 대체 가능성은 행위 호환성을 의미하고, 행위 호환성은 동일한 책임의 수행을 의미한다. + +### 2-2. 책임 +책임이란 객체가 어떤 행동을 하라고 다른 객체로부터 요청을 수신했을 때 요청을 처리하기 위해 객체가 수행하는 행동이다. + +객체의 책임은 크게 두 가지 범주로 분류된다. +- 하는 것 + - 객체를 생성하거나 계산을 하는 등의 스스로 하는 것 + - 다른 객체의 행동을 시작시키는 것 + - 다른 객체의 활동을 제어하고 조절하는 것 +- 아는 것 + - 개인적인 정보에 대해 아는 것 + - 관련된 객체에 대해 아는 것 + - 자신이 유도하거나 계산할 수 있는 것에 대해 아는 것 + +메시지는 객체로 하여금 자신의 책임, 즉 행동을 수행하게 만드는 유일한 방법이다. 메시지를 처리할 수 있다는 것은 객체가 해당 메시지에 해당하는 행동을 수행할 책임이 있다는 것을 의미한다. 따라서 메시지의 개념은 책임의 개념과 연결된다. + +### 2-3. 협력 +객체의 세계에서는 협력이라는 문맥이 객체의 행동 방식을 결정한다. 중요한 것은 개별 객체가 아니라 객체들 사이에 이루어지는 협력이다. + +객체가 다른 객체에게 주어진 책임을 수행하도록 요청을 보내는 것을 **메시지** 전송이라고 한다. 따라서 **두 객체 간의 협력은 메시지를 통해 이루어진다.** + +객체 지향 설계는 협력에 참여하기 위해 어떤 객체가 어떤 책임을 수행해야 하고 어떤 객체로부터 메시지를 수신할 것인지를 결정하는 것으로부터 시작된다. 어떤 클래스가 필요하고 어떤 메소드를 포함해야 하는지를 결정하는 것은 책임과 메시지에 대한 대략적인 윤곽을 잡은 후에 시작해도 늦지 않다. + +## 3. 객체 지향 프로그래밍의 특징 +### 3-1. 추상화(Abstraction) +- 객체들의 공통적인 특징(기능, 속성)을 도출하는 것 +- 객체 지향적 관점에서는 클래스를 정의하는 것을 추상화라고 할 수 있다. + (클래스가 없는 객체 지향 언어도 존재 ex. JavaScript) + +### 3-2. 캡슐화(Encapsulation) +- 실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있다. +- 객체가 독립적으로 역할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리하는 것 +- 코드가 묶여있어서 오류가 없어 편리하다. +- 데이터를 보이지 않고 외부와 상호작용을 할 때는 메소드를 이용하여 통신을 한다. 보통 라이브러리로 만들어서 업그레이드해 사용할 수 있다. + +### 3-3. 상속성(Inheritance) +- 하나의 클래스가 가진 특징(함수, 데이터)을 다른 클래스가 그대로 물려받는 것 +- 이미 작성된 클래스를 받아서 새로운 클래스를 생성하는 것 +- 기존 코드를 재활용해서 사용함으로써 객체 지향 방법의 중요한 기능 중 하나에 속한다. + +### 3-4. 다형성(Polymorphism) +- 약간 다른 방법으로 동작하는 함수를 동일한 이름으로 호출하는 것 +- 동일한 명령의 해석을 연결된 객체에 의존하는 것 +- 오버라이딩(Overriding), 오버로딩(Overloading) + - 오버라이딩(Overriding) : 부모 클래스의 메소드와 같은 이름을 사용하며 매개변수도 같되, 내부 소스를 재정의하는 것 + - 오버로딩(Overloading) : 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출하여 사용하는 것 + +## 4. 정리 +객체 지향의 기본 개념은 책임을 수행하는 자율적인 객체들의 협력을 통해 애플리케이션을 구축하는 것이다. 객체지향의 세계에서 객체들이 서로 협력하기 위해 사용할 수 있는 유일한 방법은 **메시지**를 전송하는 것이다. + +**객체지향 애플리케이션의 중심 사상은 연쇄적으로 메시지를 전송하고 수신하는 객체들 사이의 협력 관계를 기반으로 사용자에게 유용한 기능을 제공하는 것이다.** + +클래스 기반의 객체 지향 언어를 사용하는 대부분의 사람들은 객체 지향 애플리케이션을 클래스의 집합으로 생각한다. 프로그래머 입장에서 클래스는 실제 볼 수 있고 수정할 수 있는 구체적인 존재다. 그러나 클래스는 단지 동적인 객체들의 특성과 행위를 정적인 텍스트로 표현하기 위해 사용할 수 있는 추상화 도구일 뿐이다. 중요한 것은 클래스가 아니라 **객체**다. 클래스를 정의하는 것이 먼저가 아니라 객체들의 속성과 행위를 식별하는 것이 먼저다. **클래스는 객체의 속성과 행위를 담는 틀일 뿐이다.** + +객체 지향 설계의 중심에는 메시지가 위치한다. 객체가 메시지를 선택하는 것이 아니라 메시지가 객체를 선택하게 된다. 메시지가 객체를 선택하게 만드려면 메시지를 중심으로 협력을 설계해야 한다. + +책임-주도 설계의 핵심은 어떤 행위가 필요한지를 먼저 결정한 후에 이 행위를 수행할 객체를 결정하는 것이다. 이 과정을 흔히 What/Who 사이클이라고 한다. + +> 결론적으로 협력이라는 문맥 안에서 필요한 메시지를 먼저 결정한 후에 메시지를 수신하기에 적합한 객체를 선택한다. 그리고 수신된 메시지가 객체의 책임을 결정한다. + +협력이라는 문맥 안에서 객체의 책임을 결정하는 것은 메시지다. 책임이 먼저 오고 객체가 책임을 따른다. 결과적으로 시스템이 수행해야 하는 전체 행위는 협력하는 객체들의 책임으로 분배된다. + +객체가 자신이 수신할 메시지를 결정하게 하지 말고 메시지가 협력에 필요한 객체를 발견하게 해야 한다. \ No newline at end of file From 4fdaadcb9a7d08ffd945dd8b2fc96f9560c08e35 Mon Sep 17 00:00:00 2001 From: jeongyuneo Date: Mon, 25 Jan 2021 00:18:05 +0900 Subject: [PATCH 05/11] =?UTF-8?q?docs:=20VO(Value=20Object).md=20=EC=97=85?= =?UTF-8?q?=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VO(Value Object).md" | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 "4\354\243\274\354\260\250/VO(Value Object).md" diff --git "a/4\354\243\274\354\260\250/VO(Value Object).md" "b/4\354\243\274\354\260\250/VO(Value Object).md" new file mode 100644 index 00000000..48f88704 --- /dev/null +++ "b/4\354\243\274\354\260\250/VO(Value Object).md" @@ -0,0 +1,85 @@ +# [Java] VO(Value Object) +## 1. VO(Value Object)란 +VO(Value Object)란 말 그대로 값 객체라는 의미를 가지고 있다. +VO의 핵심 역할은 **equals()**와 **hashcode()**를 오버라이딩 하는 것이다. 즉, VO 내부에 선언된 속성(필드)의 모든 값들이 VO 객체마다 값이 같아야 같은 객체라고 판별한다. + +## 2. Value Object 기본 특성 +**Value Object**에는 기본 특성이 있다. +> 1. Immutability(불변성) - 수정자(setter)가 없음 +> 2. Value Equality(값 동등성) - 내부 값 동등성 검사 +> 3. Self Validation(자가 유효성 검사) - 생성자에서 validate + +### 2-1. Immutability(불변성) - 수정자(Setter)가 없음 +Value Object는 **불변**이다. + +불변이라는 뜻은 한번 생성되면 이후 내부 값을 바꿀 수 없음을 의미한다. 즉 **(수정자)Setter를 허용하지 않는다**는 말이다. + +쉽게 말하면, 생성자에게 하나 혹은 그 이상의 파라미터가 주입돼서 객체가 만들어지면, 돌아갈 수 없음을 의미한다. 해당 객체는 **GC(Garbage Collector)**에 의해 폐기될 때까지 동일함을 보장한다. + +- Hassle-free Sharing(번거로움없는 공유) + Value Object는 코드의 다른 부분에서 수정되지 않기 때문에 **Reference(참조)로 공유**할 수 있다. 이는 side effect를 피하기 위해 사용되는 코드의 복잡성과 부하를 극적으로 감소시키며, 멀티스레드 환경에서 그 이점이 뚜렷해진다. +- Improved Semantics(향상된 의미) + 불변성을 **"무의미한 생성자(Getter)를 Value Object에 추가하지 않는다."**라는 규칙과 결합해야 한다. 초기 클래스에는 생성자와 private 접근 지정자인 속성만 있어야 한다. + +> ### Value Object를 조작하는 방법 +> - 생성자 또는 정적 메소드를 통해 새 인스턴스 만들기 +> - 현재 객체에서 다른 객체 생성하기 +> - 내부 데이터를 추출해 다른 유형으로 변환하기 +> - 정적 팩토리 메소드 패턴을 활용해 생성하기(생성자를 private하게 바꿈) + +위와 같은 방법은 Value Object를 명확하게 해준다. +```java +final class ComplexNumber { + private float realPart; + private float complexPart; + + // 정적 메소드를 통해 새 인스턴스 만들기 + public static ComplexNumber zero() { + return new ComplexNumber(0, 0); + } + + // 생성자를 통해 새 인스턴스를 만들기 + private ComplexNumber(float realPart, float complexPart) { + this.realPart = realPart; + this.complexPart = complexPart; + } + + // 정적 팩토리 메소드 패턴을 활용하여 생성하기 (생성자를 private하게 바꿈) + public static ComplexNumber of(float realPart, float complexPart) { + return new ComplexNumber(realPart, complexPart); + } + + // 현재 객체에서 다른 객체를 생성하기 + public ComplexNumber add(ComplexNumber anotherComplexNumber) { + return new ComplexNumber( + realPart + anotherComplexNumber.realPart, + complexPart + anotherComplexNumber.complexPart + ); + } + + // 내부 데이터를 추출하여 다른 유형으로 변환하기 + public String toString() { + return String.format("%f + %f i", realPart, complexPart); + } +} +``` + +### 2-2. Value Equality(값 동등성) - 내부 값 동등성 검사 +Value Object는 내부 값이 모둗 각각 동일한지 확인하여 동등성을 테스트할 수 있다. + +> ### 동일성 vs 동등성 +> **동일성**은 객체가 완전히 같은지 판단할 수 있는 성질이고, **동등성**은 객체가 같은 정보를 가지고 있는지 판단할 수 있는 성질이다. +> 동일성은 ```==```로 **주소값**을 비교하고, 동등성은 ```equals()```로 **내용**을 비교한다. + +### 2-3. Self Validation(자가 유효성 검사) - 생성자에서 validate +Value Object는 context에서 유효한 값만 허용한다. 이는 유효하지 않은 값으로 Value Object를 만들 수 없음을 의미한다. + +생성자가 주입될 때 값의 유효성을 확인해야 한다. 유효하지 않으면 의미있는 에러를 표출한다. 이는 객체의 인스턴스에 더이상 if가 없음을 의미한다. **모든 유효성 검사는 생성 시간**에 이루어진다. + +## 3. 정리 +객체를 Value Object로 만들기 위한 체크 리스트 +- 불변하며 수정자(Setter)가 없다 +- 도메인의 의미론을 반영한다 +- 런타임동안 정보의 흐름과 변환 방법을 보여준다 +- default나 쓸모없는 Getter 메소드가 없다 +- private 속성을 가지며 다른 Value Object와 비교할 수 있다 \ No newline at end of file From ac5f51a214f008956da284a2d2a472f2c6915757 Mon Sep 17 00:00:00 2001 From: jeongyuneo Date: Thu, 28 Jan 2021 13:35:08 +0900 Subject: [PATCH 06/11] =?UTF-8?q?feat:=20=ED=94=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=EB=B0=8D=EA=B3=BC=EC=A0=9C1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/2021-Java-Study.iml | 9 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + .idea/workspace.xml | 87 ++++++++ .../executionHistory/executionHistory.bin" | Bin 0 -> 20095 bytes .../executionHistory/executionHistory.lock" | Bin 0 -> 17 bytes .../.gradle/6.7/fileChanges/last-build.bin" | Bin 0 -> 1 bytes .../.gradle/6.7/fileHashes/fileHashes.bin" | Bin 0 -> 18697 bytes .../.gradle/6.7/fileHashes/fileHashes.lock" | Bin 0 -> 17 bytes .../.gradle/6.7/gc.properties" | 0 .../buildOutputCleanup.lock" | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties" | 2 + .../buildOutputCleanup/outputFiles.bin" | Bin 0 -> 18695 bytes .../.gradle/checksums/checksums.lock" | Bin 0 -> 17 bytes .../.gradle/checksums/md5-checksums.bin" | Bin 0 -> 19097 bytes .../.gradle/checksums/sha1-checksums.bin" | Bin 0 -> 19847 bytes .../configuration-cache/gc.properties" | 0 .../.gradle/vcs-1/gc.properties" | 0 .../.idea/.gitignore" | 8 + .../.idea/compiler.xml" | 6 + .../.idea/gradle.xml" | 19 ++ .../.idea/jarRepositories.xml" | 20 ++ .../.idea/misc.xml" | 10 + .../.idea/modules/javastudy.iml" | 2 + .../.idea/uiDesigner.xml" | 124 ++++++++++++ .../build.gradle" | 19 ++ .../gradle/wrapper/gradle-wrapper.jar" | Bin 0 -> 59203 bytes .../gradle/wrapper/gradle-wrapper.properties" | 5 + .../gradlew" | 185 ++++++++++++++++++ .../gradlew.bat" | 89 +++++++++ .../out/production/classes/Calculator.class" | Bin 0 -> 785 bytes .../out/production/classes/Operator.class" | Bin 0 -> 2099 bytes .../out/production/classes/main.class" | Bin 0 -> 453 bytes .../settings.gradle" | 2 + .../src/main/java/Calculator.java" | 20 ++ .../src/main/java/Operator.java" | 48 +++++ .../src/main/java/main.java" | 6 + 37 files changed, 675 insertions(+) create mode 100644 .idea/2021-Java-Study.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/executionHistory/executionHistory.bin" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/executionHistory/executionHistory.lock" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileChanges/last-build.bin" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileHashes/fileHashes.bin" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileHashes/fileHashes.lock" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/gc.properties" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/buildOutputCleanup.lock" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/cache.properties" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/outputFiles.bin" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/checksums.lock" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/md5-checksums.bin" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/sha1-checksums.bin" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/configuration-cache/gc.properties" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/vcs-1/gc.properties" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/.gitignore" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/compiler.xml" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/gradle.xml" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/jarRepositories.xml" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/misc.xml" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/modules/javastudy.iml" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/uiDesigner.xml" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/build.gradle" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradle/wrapper/gradle-wrapper.jar" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradle/wrapper/gradle-wrapper.properties" create mode 100755 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradlew" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradlew.bat" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/Calculator.class" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/Operator.class" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/main.class" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/settings.gradle" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/src/main/java/Calculator.java" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/src/main/java/Operator.java" create mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/src/main/java/main.java" diff --git a/.idea/2021-Java-Study.iml b/.idea/2021-Java-Study.iml new file mode 100644 index 00000000..d6ebd480 --- /dev/null +++ b/.idea/2021-Java-Study.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..7fabbc98 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..35eb1ddf --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 00000000..1767edef --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1611241723426 + + + + + + + + + \ No newline at end of file diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/executionHistory/executionHistory.bin" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/executionHistory/executionHistory.bin" new file mode 100644 index 0000000000000000000000000000000000000000..d0be37703cc60e78271e226958ece27a124ffaa4 GIT binary patch literal 20095 zcmeI%KTH!*90%|#RRct^#+YD?aS#U*>Cu+9KwKaNA^rg=Rk!o??v)-K?d82YYK;R? z5=|f|CQ2g4kpU7gnz$j0MhA(M!G*ZEx#8ew@cQQhqz-N9V9fWDyZhzdd%xd%pT1s) zh6JJBwOu%bo#Vt#hzJ4@fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwx`|3x5TEu=QT znELZo+2CkO5SkBLfumVIb+hWo{L6fEPlx^gfql20H|E=Lg#ZK~009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG|gUl8yK z!XdwPHf7H_s*JQK#wgQbLwNW@;;qDY8 zx=xwy69qj^LXrZ_hw(!zB33P9a5*MYD!pUs%}UP5;GH$ ztR=b0sHee>ypq=&X!Utww6)nE@G3rEltiO3+UD^E{3Ph}w7I?n8t0y0t4aS}lFr>e zSr@FHB212}W3-cSTD?@tN*nr#5zls?xj4`fy4)p2!d(MWPv4a;J6E=YbGiT|Dk?Yl zO!msusA;IlL?vqNN%)t7&vq9K$BEY;2%DqAo?(M&omRgsY0aTs)6Wi@={Te~XUSnI8(bVFV}u)~k}l*;xvg literal 0 HcmV?d00001 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/executionHistory/executionHistory.lock" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/executionHistory/executionHistory.lock" new file mode 100644 index 0000000000000000000000000000000000000000..959d179d77ea329e712a37e1d9af022978dbe859 GIT binary patch literal 17 TcmZR6Y%aEdwJ~0a0Ror-C9?wF literal 0 HcmV?d00001 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileChanges/last-build.bin" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileChanges/last-build.bin" new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileHashes/fileHashes.bin" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileHashes/fileHashes.bin" new file mode 100644 index 0000000000000000000000000000000000000000..11a0cd6ca980fc78803c0516f228b5ac5d3f8e10 GIT binary patch literal 18697 zcmeI%KS%;$9LDk2{tO*K78Gs~4N*jeCP_pP-4N86OF;xRxJ5+>(I5piIG0mnK@Jf~ zV;S^^0}(ulnsksLT#AO4KwMGA-Baf4>K#u65I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL z_=`Y5miy)Iake*J^0d!?*|ROmQ9UEg?!<#K_>$iYr>^gd~ZE_7o-HH1~)xGDIX)5E96S}a|@T>jkBjU(0Q H+IJd1V{Lrj literal 0 HcmV?d00001 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileHashes/fileHashes.lock" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileHashes/fileHashes.lock" new file mode 100644 index 0000000000000000000000000000000000000000..52d2069943bb8e9a576904c66e2597fd0a089530 GIT binary patch literal 17 UcmZS13O;FE{bJ)q1_)pS05@9%r~m)} literal 0 HcmV?d00001 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/gc.properties" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/gc.properties" new file mode 100644 index 00000000..e69de29b diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/buildOutputCleanup.lock" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/buildOutputCleanup.lock" new file mode 100644 index 0000000000000000000000000000000000000000..21179b86ce8e8154041e6abf1f42ec5e69df3542 GIT binary patch literal 17 UcmZSH_i@j^=9~A9FhBqw08oYoc>n+a literal 0 HcmV?d00001 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/cache.properties" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/cache.properties" new file mode 100644 index 00000000..c3705314 --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/cache.properties" @@ -0,0 +1,2 @@ +#Fri Jan 22 11:48:08 KST 2021 +gradle.version=6.7 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/outputFiles.bin" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/outputFiles.bin" new file mode 100644 index 0000000000000000000000000000000000000000..4d3b986bbd2abb489a799445c53332cd6e76cee9 GIT binary patch literal 18695 zcmeI%ODIH97{Ku}HXb9-)Xa{Zq$o|4Qc74%HX2z;9*wdP7E?CXO0p7(oy9C@Bt;gc zrWgy0k;jHvAayr3Vxh#j?)NpxPATbs>zsS~pKkY_-}ZJG6DWI^%jB-A+>#Xn2q1s} z0tg_000IagfB*srAbEMdyeE2cA$?B! zq;rtjyI=Q9U)8R6V|+nxj~M|35I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|00D-?L&}2WW&<>wF+^OVCvEi4>&))U@sn7BOnq8;B literal 0 HcmV?d00001 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/checksums.lock" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/checksums.lock" new file mode 100644 index 0000000000000000000000000000000000000000..44cc4908a29fb35c4976b7adda97d9585a72cdf8 GIT binary patch literal 17 UcmZRcyI81oQv{nb0|aOS04W{=Hvj+t literal 0 HcmV?d00001 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/md5-checksums.bin" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/md5-checksums.bin" new file mode 100644 index 0000000000000000000000000000000000000000..1f007ac83b4e679862bcb652abd66f2ac61dfecb GIT binary patch literal 19097 zcmeI){Yw*J00;1MnwlOtD|1D*YAq^e%}lTt%4J~=&CnJ|mSi)d&>)SKL6m7_5~M|< zsI!+r5N=Us{veUT9INmp!jMKoe5ow8C{tIl?s%RD$@>F>_#WKu;d}SJ=ef_XyKNiC zDdb+daZ_8^)DR;GKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1pXHRgYY0hhd)w4siA^g7AeG2@43UVPTlzTI?=pL7m!`O{YAKKjY})fkZ+=xr`m zRt=AlMm_xnfZtVVqitbJw%VAsIBP-Ry~q+zA8FidAaewZ|EDxSOJbAKseZtK69y zVcnwD9a7-<5@}=p+OEiN=KV#dYj<6E;!uUtMg^&a?U6Q`%X-IaG8~yo=a6dX>1YgT nSX89JUy?RD0@VCRW7F2d!EO7NRiz2P^AJ~MX(Ele$Hm4UF@QGe literal 0 HcmV?d00001 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/sha1-checksums.bin" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/sha1-checksums.bin" new file mode 100644 index 0000000000000000000000000000000000000000..a5865ade6edc990cae4ea437564d7b21f301329c GIT binary patch literal 19847 zcmeI4drVVT9LFy(1f-0jAmCsS2oFKR7*#eVN>c)q#~736jN*!56nSjIDoPljh)#Lw zK!MW2(9-a*WxRv((2N0sNQ40nFgh8c#LWWBL>#-9bI;6L|MV~OJITHGr5KK;FEt-tcW>u=A%O{8r7-Yxz`{gE!n@_E?(P{5m{QH4mJmT!e8OK(X`|QTK zs9f_w^ak%-lyd`cE;;Gro3f{nNneMJ^O}DogR*GTK>9kpIB)Rp*OM*|CDPZ)#CaR1 zuqa#3>ZHfp;JiK8X>f=0@C3?z%W>XuKPQ>x8urUenmh<-v z#)T7NI_Kb=#Y*X~%DCEua{oY_f7~Z7j&!KVL^<~v&e`3M1dprj;!y6p1?Pbm7nvFE zEidSN6z3uOUe`^8--%G}r-So|y>{wf4EE4|e9r%uOL_er=hltWH%~P_Fw=EfB`T72EYIq00UqE z41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq00UqE z41fVJ@TLqnlNWLzH!Et>HxB-!GDa)s?lWHd_Fpyo$IfW5$+yB)__pq)(WoNhFnRp& z|J2T?gGUA(?M5dJ;~X0n-yMt{uRn+=AsbQay_BgiGqqF8M-0T*%F>4twq7$S?dY{c zl!#tYU_ia8{zhtXKHautTxeD`r6F7x`Bo>FpZBnyu0_99Z?H+Z7W;YNb*bDtEX{>T z&CL(m-+EzVJfg}P(7fKsQ>KD)EyIp?diT~O2y z?ugQ(R!=C@%2zM6xiMW*mJ}0^6jiV(_DnU497Iu<5JWJjwFwH;=ujs2f>)+qRJaMp z&x%)c$-gmxrp_VEAVitc8A&<3$Tyq4)8=q%;F0`Eg8pYhL|rDIHq{u^Itztb?d?p? z-@3k9X*LD2KN)Vz{S_PqOh^Shs2HDKzB=85KZ;0QiK-yBoyz^w(I>?vy#{x^EFPxapsi^ z8uBtvMAd~N%Jel3^Hgqh-4`-nIxyxtX9t8=3dPan+81hG4d{DArT4OOt>N+cCok)^ z3^aQ(cs2V&<|;(qKO(A;nh)8Pw<}Y}duLq!QrRseR7*-s17|;%oM?HDsAk?OrRFrI lOjU^I3OkuuK_2yeP8sQ%S}tL8Q~~l1TP#*7Rf!2j{R{0hsPX^+ literal 0 HcmV?d00001 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/configuration-cache/gc.properties" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/configuration-cache/gc.properties" new file mode 100644 index 00000000..e69de29b diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/vcs-1/gc.properties" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/vcs-1/gc.properties" new file mode 100644 index 00000000..e69de29b diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/.gitignore" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/.gitignore" new file mode 100644 index 00000000..73f69e09 --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/.gitignore" @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/compiler.xml" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/compiler.xml" new file mode 100644 index 00000000..61a9130c --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/compiler.xml" @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/gradle.xml" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/gradle.xml" new file mode 100644 index 00000000..02b3e5bf --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/gradle.xml" @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/jarRepositories.xml" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/jarRepositories.xml" new file mode 100644 index 00000000..fdc392fe --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/jarRepositories.xml" @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/misc.xml" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/misc.xml" new file mode 100644 index 00000000..da956e3e --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/misc.xml" @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/modules/javastudy.iml" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/modules/javastudy.iml" new file mode 100644 index 00000000..1dd3549c --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/modules/javastudy.iml" @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/uiDesigner.xml" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/uiDesigner.xml" new file mode 100644 index 00000000..e96534fb --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/uiDesigner.xml" @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/build.gradle" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/build.gradle" new file mode 100644 index 00000000..353aec80 --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/build.gradle" @@ -0,0 +1,19 @@ +plugins { + id 'java' +} + +group 'org.javastudy' +version '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} + +dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradle/wrapper/gradle-wrapper.jar" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradle/wrapper/gradle-wrapper.jar" new file mode 100644 index 0000000000000000000000000000000000000000..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f GIT binary patch literal 59203 zcma&O1CT9Y(k9%tZQHhO+qUh#ZQHhO+qmuS+qP|E@9xZO?0h@l{(r>DQ>P;GjjD{w zH}lENr;dU&FbEU?00aa80D$0M0RRB{U*7-#kbjS|qAG&4l5%47zyJ#WrfA#1$1Ctx zf&Z_d{GW=lf^w2#qRJ|CvSJUi(^E3iv~=^Z(zH}F)3Z%V3`@+rNB7gTVU{Bb~90p|f+0(v;nz01EG7yDMX9@S~__vVgv%rS$+?IH+oZ03D5zYrv|^ zC1J)SruYHmCki$jLBlTaE5&dFG9-kq3!^i>^UQL`%gn6)jz54$WDmeYdsBE9;PqZ_ zoGd=P4+|(-u4U1dbAVQrFWoNgNd;0nrghPFbQrJctO>nwDdI`Q^i0XJDUYm|T|RWc zZ3^Qgo_Qk$%Fvjj-G}1NB#ZJqIkh;kX%V{THPqOyiq)d)0+(r9o(qKlSp*hmK#iIY zA^)Vr$-Hz<#SF=0@tL@;dCQsm`V9s1vYNq}K1B)!XSK?=I1)tX+bUV52$YQu*0%fnWEukW>mxkz+%3-S!oguE8u#MGzST8_Dy^#U?fA@S#K$S@9msUiX!gd_ow>08w5)nX{-KxqMOo7d?k2&?Vf z&diGDtZr(0cwPe9z9FAUSD9KC)7(n^lMWuayCfxzy8EZsns%OEblHFSzP=cL6}?J| z0U$H!4S_TVjj<`6dy^2j`V`)mC;cB%* z8{>_%E1^FH!*{>4a7*C1v>~1*@TMcLK{7nEQ!_igZC}ikJ$*<$yHy>7)oy79A~#xE zWavoJOIOC$5b6*q*F_qN1>2#MY)AXVyr$6x4b=$x^*aqF*L?vmj>Mgv+|ITnw_BoW zO?jwHvNy^prH{9$rrik1#fhyU^MpFqF2fYEt(;4`Q&XWOGDH8k6M=%@fics4ajI;st# zCU^r1CK&|jzUhRMv;+W~6N;u<;#DI6cCw-otsc@IsN3MoSD^O`eNflIoR~l4*&-%RBYk@gb^|-JXs&~KuSEmMxB}xSb z@K76cXD=Y|=I&SNC2E+>Zg?R6E%DGCH5J1nU!A|@eX9oS(WPaMm==k2s_ueCqdZw| z&hqHp)47`c{BgwgvY2{xz%OIkY1xDwkw!<0veB#yF4ZKJyabhyyVS`gZepcFIk%e2 zTcrmt2@-8`7i-@5Nz>oQWFuMC_KlroCl(PLSodswHqJ3fn<;gxg9=}~3x_L3P`9Sn zChIf}8vCHvTriz~T2~FamRi?rh?>3bX1j}%bLH+uFX+p&+^aXbOK7clZxdU~6Uxgy z8R=obwO4dL%pmVo*Ktf=lH6hnlz_5k3cG;m8lgaPp~?eD!Yn2kf)tU6PF{kLyn|oI@eQ`F z3IF7~Blqg8-uwUuWZScRKn%c2_}dXB6Dx_&xR*n9M9LXasJhtZdr$vBY!rP{c@=)& z#!?L$2UrkvClwQO>U*fSMs67oSj2mxiJ$t;E|>q%Kh_GzzWWO&3;ufU%2z%ucBU8H z3WIwr$n)cfCXR&>tyB7BcSInK>=ByZA%;cVEJhcg<#6N{aZC4>K41XF>ZgjG`z_u& zGY?;Ad?-sgiOnI`oppF1o1Gurqbi*;#x2>+SSV6|1^G@ooVy@fg?wyf@0Y!UZ4!}nGuLeC^l)6pwkh|oRY`s1Pm$>zZ3u-83T|9 zGaKJIV3_x+u1>cRibsaJpJqhcm%?0-L;2 zitBrdRxNmb0OO2J%Y&Ym(6*`_P3&&5Bw157{o7LFguvxC$4&zTy#U=W*l&(Q2MNO} zfaUwYm{XtILD$3864IA_nn34oVa_g^FRuHL5wdUd)+W-p-iWCKe8m_cMHk+=? zeKX)M?Dt(|{r5t7IenkAXo%&EXIb-i^w+0CX0D=xApC=|Xy(`xy+QG^UyFe z+#J6h_&T5i#sV)hj3D4WN%z;2+jJcZxcI3*CHXGmOF3^)JD5j&wfX)e?-|V0GPuA+ zQFot%aEqGNJJHn$!_}#PaAvQ^{3-Ye7b}rWwrUmX53(|~i0v{}G_sI9uDch_brX&6 zWl5Ndj-AYg(W9CGfQf<6!YmY>Ey)+uYd_JNXH=>|`OH-CDCmcH(0%iD_aLlNHKH z7bcW-^5+QV$jK?R*)wZ>r9t}loM@XN&M-Pw=F#xn(;u3!(3SXXY^@=aoj70;_=QE9 zGghsG3ekq#N||u{4We_25U=y#T*S{4I{++Ku)> zQ!DZW;pVcn>b;&g2;YE#+V`v*Bl&Y-i@X6D*OpNA{G@JAXho&aOk(_j^weW{#3X5Y z%$q_wpb07EYPdmyH(1^09i$ca{O<}7) zRWncXdSPgBE%BM#by!E>tdnc$8RwUJg1*x($6$}ae$e9Knj8gvVZe#bLi!<+&BkFj zg@nOpDneyc+hU9P-;jmOSMN|*H#>^Ez#?;%C3hg_65leSUm;iz)UkW)jX#p)e&S&M z1|a?wDzV5NVnlhRBCd_;F87wp>6c<&nkgvC+!@KGiIqWY4l}=&1w7|r6{oBN8xyzh zG$b#2=RJp_iq6)#t5%yLkKx(0@D=C3w+oiXtSuaQ%I1WIb-eiE$d~!)b@|4XLy!CZ z9p=t=%3ad@Ep+<9003D2KZ5VyP~_n$=;~r&YUg5UZ0KVD&tR1DHy9x)qWtKJp#Kq# zP*8p#W(8JJ_*h_3W}FlvRam?<4Z+-H77^$Lvi+#vmhL9J zJ<1SV45xi;SrO2f=-OB(7#iNA5)x1uNC-yNxUw|!00vcW2PufRm>e~toH;M0Q85MQLWd?3O{i8H+5VkR@l9Dg-ma ze2fZ%>G(u5(k9EHj2L6!;(KZ8%8|*-1V|B#EagbF(rc+5iL_5;Eu)L4Z-V;0HfK4d z*{utLse_rvHZeQ>V5H=f78M3Ntg1BPxFCVD{HbNA6?9*^YIq;B-DJd{Ca2L#)qWP? zvX^NhFmX?CTWw&Ns}lgs;r3i+Bq@y}Ul+U%pzOS0Fcv9~aB(0!>GT0)NO?p=25LjN z2bh>6RhgqD7bQj#k-KOm@JLgMa6>%-ok1WpOe)FS^XOU{c?d5shG(lIn3GiVBxmg`u%-j=)^v&pX1JecJics3&jvPI)mDut52? z3jEA)DM%}BYbxxKrizVYwq?(P&19EXlwD9^-6J+4!}9{ywR9Gk42jjAURAF&EO|~N z)?s>$Da@ikI4|^z0e{r`J8zIs>SpM~Vn^{3fArRu;?+43>lD+^XtUcY1HidJwnR6+ z!;oG2=B6Z_=M%*{z-RaHc(n|1RTKQdNjjV!Pn9lFt^4w|AeN06*j}ZyhqZ^!-=cyGP_ShV1rGxkx8t zB;8`h!S{LD%ot``700d0@Grql(DTt4Awgmi+Yr0@#jbe=2#UkK%rv=OLqF)9D7D1j z!~McAwMYkeaL$~kI~90)5vBhBzWYc3Cj1WI0RS`z000R8-@ET0dA~*r(gSiCJmQMN&4%1D zyVNf0?}sBH8zNbBLn>~(W{d3%@kL_eQ6jEcR{l>C|JK z(R-fA!z|TTRG40|zv}7E@PqCAXP3n`;%|SCQ|ZS%ym$I{`}t3KPL&^l5`3>yah4*6 zifO#{VNz3)?ZL$be;NEaAk9b#{tV?V7 zP|wf5YA*1;s<)9A4~l3BHzG&HH`1xNr#%){4xZ!jq%o=7nN*wMuXlFV{HaiQLJ`5G zBhDi#D(m`Q1pLh@Tq+L;OwuC52RdW7b8}~60WCOK5iYMUad9}7aWBuILb({5=z~YF zt?*Jr5NG+WadM{mDL>GyiByCuR)hd zA=HM?J6l1Xv0Dl+LW@w$OTcEoOda^nFCw*Sy^I@$sSuneMl{4ys)|RY#9&NxW4S)9 zq|%83IpslTLoz~&vTo!Ga@?rj_kw{|k{nv+w&Ku?fyk4Ki4I?);M|5Axm)t+BaE)D zm(`AQ#k^DWrjbuXoJf2{Aj^KT zFb1zMSqxq|vceV+Mf-)$oPflsO$@*A0n0Z!R{&(xh8s}=;t(lIy zv$S8x>m;vQNHuRzoaOo?eiWFe{0;$s`Bc+Osz~}Van${u;g(su`3lJ^TEfo~nERfP z)?aFzpDgnLYiERsKPu|0tq4l2wT)Atr6Qb%m-AUn6HnCue*yWICp7TjW$@sO zm5rm4aTcPQ(rfi7a`xP7cKCFrJD}*&_~xgLyr^-bmsL}y;A5P|al8J3WUoBSjqu%v zxC;mK!g(7r6RRJ852Z~feoC&sD3(6}^5-uLK8o)9{8L_%%rItZK9C){UxB|;G>JbP zsRRtS4-3B*5c+K2kvmgZK8472%l>3cntWUOVHxB|{Ay~aOg5RN;{PJgeVD*H%ac+y!h#wi%o2bF2Ca8IyMyH{>4#{E_8u^@+l-+n=V}Sq?$O z{091@v%Bd*3pk0^2UtiF9Z+(a@wy6 zUdw8J*ze$K#=$48IBi1U%;hmhO>lu!uU;+RS}p&6@rQila7WftH->*A4=5W|Fmtze z)7E}jh@cbmr9iup^i%*(uF%LG&!+Fyl@LFA-}Ca#bxRfDJAiR2dt6644TaYw1Ma79 zt8&DYj31j^5WPNf5P&{)J?WlCe@<3u^78wnd(Ja4^a>{^Tw}W>|Cjt^If|7l^l)^Q zbz|7~CF(k_9~n|h;ysZ+jHzkXf(*O*@5m zLzUmbHp=x!Q|!9NVXyipZ3)^GuIG$k;D)EK!a5=8MFLI_lpf`HPKl=-Ww%z8H_0$j ztJ||IfFG1lE9nmQ0+jPQy zCBdKkjArH@K7jVcMNz);Q(Q^R{d5G?-kk;Uu_IXSyWB)~KGIizZL(^&qF;|1PI7!E zTP`%l)gpX|OFn&)M%txpQ2F!hdA~hX1Cm5)IrdljqzRg!f{mN%G~H1&oqe`5eJCIF zHdD7O;AX-{XEV(a`gBFJ9ews#CVS2y!&>Cm_dm3C8*n3MA*e67(WC?uP@8TXuMroq z{#w$%z@CBIkRM7?}Xib+>hRjy?%G!fiw8! z8(gB+8J~KOU}yO7UGm&1g_MDJ$IXS!`+*b*QW2x)9>K~Y*E&bYMnjl6h!{17_8d!%&9D`a7r&LKZjC<&XOvTRaKJ1 zUY@hl5^R&kZl3lU3njk`3dPzxj$2foOL26r(9zsVF3n_F#v)s5vv3@dgs|lP#eylq62{<-vczqP!RpVBTgI>@O6&sU>W|do17+#OzQ7o5A$ICH z?GqwqnK^n2%LR;$^oZM;)+>$X3s2n}2jZ7CdWIW0lnGK-b#EG01)P@aU`pg}th&J-TrU`tIpb5t((0eu|!u zQz+3ZiOQ^?RxxK4;zs=l8q!-n7X{@jSwK(iqNFiRColuEOg}!7cyZi`iBX4g1pNBj zAPzL?P^Ljhn;1$r8?bc=#n|Ed7wB&oHcw()&*k#SS#h}jO?ZB246EGItsz*;^&tzp zu^YJ0=lwsi`eP_pU8}6JA7MS;9pfD;DsSsLo~ogzMNP70@@;Fm8f0^;>$Z>~}GWRw!W5J3tNX*^2+1f3hz{~rIzJo z6W%J(H!g-eI_J1>0juX$X4Cl6i+3wbc~k146UIX&G22}WE>0ga#WLsn9tY(&29zBvH1$`iWtTe zG2jYl@P!P)eb<5DsR72BdI7-zP&cZNI{7q3e@?N8IKc4DE#UVr->|-ryuJXk^u^>4 z$3wE~=q390;XuOQP~TNoDR?#|NSPJ%sTMInA6*rJ%go|=YjGe!B>z6u$IhgQSwoV* zjy3F2#I>uK{42{&IqP59)Y(1*Z>>#W8rCf4_eVsH)`v!P#^;BgzKDR`ARGEZzkNX+ zJUQu=*-ol=Xqqt5=`=pA@BIn@6a9G8C{c&`i^(i+BxQO9?YZ3iu%$$da&Kb?2kCCo zo7t$UpSFWqmydXf@l3bVJ=%K?SSw)|?srhJ-1ZdFu*5QhL$~-IQS!K1s@XzAtv6*Y zl8@(5BlWYLt1yAWy?rMD&bwze8bC3-GfNH=p zynNFCdxyX?K&G(ZZ)afguQ2|r;XoV^=^(;Cku#qYn4Lus`UeKt6rAlFo_rU`|Rq z&G?~iWMBio<78of-2X(ZYHx~=U0Vz4btyXkctMKdc9UM!vYr~B-(>)(Hc|D zMzkN4!PBg%tZoh+=Gba!0++d193gbMk2&krfDgcbx0jI92cq?FFESVg0D$>F+bil} zY~$)|>1HZsX=5sAZ2WgPB5P=8X#TI+NQ(M~GqyVB53c6IdX=k>Wu@A0Svf5#?uHaF zsYn|koIi3$(%GZ2+G+7Fv^lHTb#5b8sAHSTnL^qWZLM<(1|9|QFw9pnRU{svj}_Al zL)b9>fN{QiA($8peNEJyy`(a{&uh-T4_kdZFIVsKKVM(?05}76EEz?#W za^fiZOAd14IJ4zLX-n7Lq0qlQ^lW8Cvz4UKkV9~P}>sq0?xD3vg+$4vLm~C(+ zM{-3Z#qnZ09bJ>}j?6ry^h+@PfaD7*jZxBEY4)UG&daWb??6)TP+|3#Z&?GL?1i+280CFsE|vIXQbm| zM}Pk!U`U5NsNbyKzkrul-DzwB{X?n3E6?TUHr{M&+R*2%yOiXdW-_2Yd6?38M9Vy^ z*lE%gA{wwoSR~vN0=no}tP2Ul5Gk5M(Xq`$nw#ndFk`tcpd5A=Idue`XZ!FS>Q zG^0w#>P4pPG+*NC9gLP4x2m=cKP}YuS!l^?sHSFftZy{4CoQrb_ z^20(NnG`wAhMI=eq)SsIE~&Gp9Ne0nD4%Xiu|0Fj1UFk?6avDqjdXz{O1nKao*46y zT8~iA%Exu=G#{x=KD;_C&M+Zx4+n`sHT>^>=-1YM;H<72k>$py1?F3#T1*ef9mLZw z5naLQr?n7K;2l+{_uIw*_1nsTn~I|kkCgrn;|G~##hM;9l7Jy$yJfmk+&}W@JeKcF zx@@Woiz8qdi|D%aH3XTx5*wDlbs?dC1_nrFpm^QbG@wM=i2?Zg;$VK!c^Dp8<}BTI zyRhAq@#%2pGV49*Y5_mV4+OICP|%I(dQ7x=6Ob}>EjnB_-_18*xrY?b%-yEDT(wrO z9RY2QT0`_OpGfMObKHV;QLVnrK%mc?$WAdIT`kJQT^n%GuzE7|9@k3ci5fYOh(287 zuIbg!GB3xLg$YN=n)^pHGB0jH+_iIiC=nUcD;G6LuJsjn2VI1cyZx=a?ShCsF==QK z;q~*m&}L<-cb+mDDXzvvrRsybcgQ;Vg21P(uLv5I+eGc7o7tc6`;OA9{soHFOz zT~2?>Ts}gprIX$wRBb4yE>ot<8+*Bv`qbSDv*VtRi|cyWS>)Fjs>fkNOH-+PX&4(~ z&)T8Zam2L6puQl?;5zg9h<}k4#|yH9czHw;1jw-pwBM*O2hUR6yvHATrI%^mvs9q_ z&ccT0>f#eDG<^WG^q@oVqlJrhxH)dcq2cty@l3~|5#UDdExyXUmLQ}f4#;6fI{f^t zDCsgIJ~0`af%YR%Ma5VQq-p21k`vaBu6WE?66+5=XUd%Ay%D$irN>5LhluRWt7 zov-=f>QbMk*G##&DTQyou$s7UqjjW@k6=!I@!k+S{pP8R(2=e@io;N8E`EOB;OGoI zw6Q+{X1_I{OO0HPpBz!X!@`5YQ2)t{+!?M_iH25X(d~-Zx~cXnS9z>u?+If|iNJbx zyFU2d1!ITX64D|lE0Z{dLRqL1Ajj=CCMfC4lD3&mYR_R_VZ>_7_~|<^o*%_&jevU+ zQ4|qzci=0}Jydw|LXLCrOl1_P6Xf@c0$ieK2^7@A9UbF{@V_0p%lqW|L?5k>bVM8|p5v&2g;~r>B8uo<4N+`B zH{J)h;SYiIVx@#jI&p-v3dwL5QNV1oxPr8J%ooezTnLW>i*3Isb49%5i!&ac_dEXv zvXmVUck^QHmyrF8>CGXijC_R-y(Qr{3Zt~EmW)-nC!tiH`wlw5D*W7Pip;T?&j%kX z6DkZX4&}iw>hE(boLyjOoupf6JpvBG8}jIh!!VhnD0>}KSMMo{1#uU6kiFcA04~|7 zVO8eI&x1`g4CZ<2cYUI(n#wz2MtVFHx47yE5eL~8bot~>EHbevSt}LLMQX?odD{Ux zJMnam{d)W4da{l7&y-JrgiU~qY3$~}_F#G7|MxT)e;G{U`In&?`j<5D->}cb{}{T(4DF0BOk-=1195KB-E*o@c?`>y#4=dMtYtSY=&L{!TAjFVcq0y@AH`vH! z$41+u!Ld&}F^COPgL(EE{0X7LY&%D7-(?!kjFF7=qw<;`V{nwWBq<)1QiGJgUc^Vz ztMUlq1bZqKn17|6x6iAHbWc~l1HcmAxr%$Puv!znW)!JiukwIrqQ00|H$Z)OmGG@= zv%A8*4cq}(?qn4rN6o`$Y))(MyXr8R<2S^J+v(wmFmtac!%VOfN?&(8Nr!T@kV`N; z*Q33V3t`^rN&aBiHet)18wy{*wi1=W!B%B-Q6}SCrUl$~Hl{@!95ydml@FK8P=u4s z4e*7gV2s=YxEvskw2Ju!2%{8h01rx-3`NCPc(O zH&J0VH5etNB2KY6k4R@2Wvl^Ck$MoR3=)|SEclT2ccJ!RI9Nuter7u9@;sWf-%um;GfI!=eEIQ2l2p_YWUd{|6EG ze{yO6;lMc>;2tPrsNdi@&1K6(1;|$xe8vLgiouj%QD%gYk`4p{Ktv9|j+!OF-P?@p z;}SV|oIK)iwlBs+`ROXkhd&NK zzo__r!B>tOXpBJMDcv!Mq54P+n4(@dijL^EpO1wdg~q+!DT3lB<>9AANSe!T1XgC=J^)IP0XEZ()_vpu!!3HQyJhwh?r`Ae%Yr~b% zO*NY9t9#qWa@GCPYOF9aron7thfWT`eujS4`t2uG6)~JRTI;f(ZuoRQwjZjp5Pg34 z)rp$)Kr?R+KdJ;IO;pM{$6|2y=k_siqvp%)2||cHTe|b5Ht8&A{wazGNca zX$Ol?H)E_R@SDi~4{d-|8nGFhZPW;Cts1;08TwUvLLv&_2$O6Vt=M)X;g%HUr$&06 zISZb(6)Q3%?;3r~*3~USIg=HcJhFtHhIV(siOwV&QkQe#J%H9&E21!C*d@ln3E@J* zVqRO^<)V^ky-R|%{(9`l-(JXq9J)1r$`uQ8a}$vr9E^nNiI*thK8=&UZ0dsFN_eSl z(q~lnD?EymWLsNa3|1{CRPW60>DSkY9YQ;$4o3W7Ms&@&lv9eH!tk~N&dhqX&>K@} zi1g~GqglxkZ5pEFkllJ)Ta1I^c&Bt6#r(QLQ02yHTaJB~- zCcE=5tmi`UA>@P=1LBfBiqk)HB4t8D?02;9eXj~kVPwv?m{5&!&TFYhu>3=_ zsGmYZ^mo*-j69-42y&Jj0cBLLEulNRZ9vXE)8~mt9C#;tZs;=#M=1*hebkS;7(aGf zcs7zH(I8Eui9UU4L--))yy`&d&$In&VA2?DAEss4LAPCLd>-$i?lpXvn!gu^JJ$(DoUlc6wE98VLZ*z`QGQov5l4Fm_h?V-;mHLYDVOwKz7>e4+%AzeO>P6v}ndPW| zM>m#6Tnp7K?0mbK=>gV}=@k*0Mr_PVAgGMu$j+pWxzq4MAa&jpCDU&-5eH27Iz>m^ zax1?*HhG%pJ((tkR(V(O(L%7v7L%!_X->IjS3H5kuXQT2!ow(;%FDE>16&3r){!ex zhf==oJ!}YU89C9@mfDq!P3S4yx$aGB?rbtVH?sHpg?J5C->!_FHM%Hl3#D4eplxzQ zRA+<@LD%LKSkTk2NyWCg7u=$%F#;SIL44~S_OGR}JqX}X+=bc@swpiClB`Zbz|f!4 z7Ysah7OkR8liXfI`}IIwtEoL}(URrGe;IM8%{>b1SsqXh)~w}P>yiFRaE>}rEnNkT z!HXZUtxUp1NmFm)Dm@-{FI^aRQqpSkz}ZSyKR%Y}YHNzBk)ZIp} zMtS=aMvkgWKm9&oTcU0?S|L~CDqA+sHpOxwnswF-fEG)cXCzUR?ps@tZa$=O)=L+5 zf%m58cq8g_o}3?Bhh+c!w4(7AjxwQ3>WnVi<{{38g7yFboo>q|+7qs<$8CPXUFAN< zG&}BHbbyQ5n|qqSr?U~GY{@GJ{(Jny{bMaOG{|IkUj7tj^9pa9|FB_<+KHLxSxR;@ zHpS$4V)PP+tx}22fWx(Ku9y+}Ap;VZqD0AZW4gCDTPCG=zgJmF{|x;(rvdM|2|9a}cex6xrMkERnkE;}jvU-kmzd%_J50$M`lIPCKf+^*zL=@LW`1SaEc%=m zQ+lT06Gw+wVwvQ9fZ~#qd430v2HndFsBa9WjD0P}K(rZYdAt^5WQIvb%D^Q|pkVE^ zte$&#~zmULFACGfS#g=2OLOnIf2Of-k!(BIHjs77nr!5Q1*I9 z1%?=~#Oss!rV~?-6Gm~BWJiA4mJ5TY&iPm_$)H1_rTltuU1F3I(qTQ^U$S>%$l z)Wx1}R?ij0idp@8w-p!Oz{&*W;v*IA;JFHA9%nUvVDy7Q8woheC#|8QuDZb-L_5@R zOqHwrh|mVL9b=+$nJxM`3eE{O$sCt$UK^2@L$R(r^-_+z?lOo+me-VW=Zw z-Bn>$4ovfWd%SPY`ab-u9{INc*k2h+yH%toDHIyqQ zO68=u`N}RIIs7lsn1D){)~%>ByF<>i@qFb<-axvu(Z+6t7v<^z&gm9McRB~BIaDn$ z#xSGT!rzgad8o>~kyj#h1?7g96tOcCJniQ+*#=b7wPio>|6a1Z?_(TS{)KrPe}(8j z!#&A=k(&Pj^F;r)CI=Z{LVu>uj!_W1q4b`N1}E(i%;BWjbEcnD=mv$FL$l?zS6bW!{$7j1GR5ocn94P2u{ z70tAAcpqtQo<@cXw~@i-@6B23;317|l~S>CB?hR5qJ%J3EFgyBdJd^fHZu7AzHF(BQ!tyAz^L0`X z23S4Fe{2X$W0$zu9gm%rg~A>ijaE#GlYlrF9$ds^QtaszE#4M(OLVP2O-;XdT(XIC zatwzF*)1c+t~c{L=fMG8Z=k5lv>U0;C{caN1NItnuSMp)6G3mbahu>E#sj&oy94KC zpH}8oEw{G@N3pvHhp{^-YaZeH;K+T_1AUv;IKD<=mv^&Ueegrb!yf`4VlRl$M?wsl zZyFol(2|_QM`e_2lYSABpKR{{NlxlDSYQNkS;J66aT#MSiTx~;tUmvs-b*CrR4w=f z8+0;*th6kfZ3|5!Icx3RV11sp=?`0Jy3Fs0N4GZQMN=8HmT6%x9@{Dza)k}UwL6JT zHRDh;%!XwXr6yuuy`4;Xsn0zlR$k%r%9abS1;_v?`HX_hI|+EibVnlyE@3aL5vhQq zlIG?tN^w@0(v9M*&L+{_+RQZw=o|&BRPGB>e5=ys7H`nc8nx)|-g;s7mRc7hg{GJC zAe^vCIJhajmm7C6g! zL&!WAQ~5d_5)00?w_*|*H>3$loHrvFbitw#WvLB!JASO?#5Ig5$Ys10n>e4|3d;tS zELJ0|R4n3Az(Fl3-r^QiV_C;)lQ1_CW{5bKS15U|E9?ZgLec@%kXr84>5jV2a5v=w z?pB1GPdxD$IQL4)G||B_lI+A=08MUFFR4MxfGOu07vfIm+j=z9tp~5i_6jb`tR>qV z$#`=BQ*jpCjm$F0+F)L%xRlnS%#&gro6PiRfu^l!EVan|r3y}AHJQOORGx4~ z&<)3=K-tx518DZyp%|!EqpU!+X3Et7n2AaC5(AtrkW>_57i}$eqs$rupubg0a1+WO zGHZKLN2L0D;ab%{_S1Plm|hx8R?O14*w*f&2&bB050n!R2by zw!@XOQx$SqZ5I<(Qu$V6g>o#A!JVwErWv#(Pjx=KeS0@hxr4?13zj#oWwPS(7Ro|v z>Mp@Kmxo79q|}!5qtX2-O@U&&@6s~!I&)1WQIl?lTnh6UdKT_1R640S4~f=_xoN3- zI+O)$R@RjV$F=>Ti7BlnG1-cFKCC(t|Qjm{SalS~V-tX#+2ekRhwmN zZr`8{QF6y~Z!D|{=1*2D-JUa<(1Z=;!Ei!KiRNH?o{p5o3crFF=_pX9O-YyJchr$~ zRC`+G+8kx~fD2k*ZIiiIGR<8r&M@3H?%JVOfE>)})7ScOd&?OjgAGT@WVNSCZ8N(p zuQG~76GE3%(%h1*vUXg$vH{ua0b`sQ4f0*y=u~lgyb^!#CcPJa2mkSEHGLsnO^kb$ zru5_l#nu=Y{rSMWiYx?nO{8I!gH+?wEj~UM?IrG}E|bRIBUM>UlY<`T1EHpRr36vv zBi&dG8oxS|J$!zoaq{+JpJy+O^W(nt*|#g32bd&K^w-t>!Vu9N!k9eA8r!Xc{utY> zg9aZ(D2E0gL#W0MdjwES-7~Wa8iubPrd?8-$C4BP?*wok&O8+ykOx{P=Izx+G~hM8 z*9?BYz!T8~dzcZr#ux8kS7u7r@A#DogBH8km8Ry4slyie^n|GrTbO|cLhpqgMdsjX zJ_LdmM#I&4LqqsOUIXK8gW;V0B(7^$y#h3h>J0k^WJfAMeYek%Y-Dcb_+0zPJez!GM zAmJ1u;*rK=FNM0Nf}Y!!P9c4)HIkMnq^b;JFd!S3?_Qi2G#LIQ)TF|iHl~WKK6JmK zbv7rPE6VkYr_%_BT}CK8h=?%pk@3cz(UrZ{@h40%XgThP*-Oeo`T0eq9 zA8BnWZKzCy5e&&_GEsU4*;_k}(8l_&al5K-V*BFM=O~;MgRkYsOs%9eOY6s6AtE*<7GQAR2ulC3RAJrG_P1iQK5Z~&B z&f8X<>yJV6)oDGIlS$Y*D^Rj(cszTy5c81a5IwBr`BtnC6_e`ArI8CaTX_%rx7;cn zR-0?J_LFg*?(#n~G8cXut(1nVF0Oka$A$1FGcERU<^ggx;p@CZc?3UB41RY+wLS`LWFNSs~YP zuw1@DNN3lTd|jDL7gjBsd9}wIw}4xT2+8dBQzI00m<@?c2L%>}QLfK5%r!a-iII`p zX@`VEUH)uj^$;7jVUYdADQ2k*!1O3WdfgF?OMtUXNpQ1}QINamBTKDuv19^{$`8A1 zeq%q*O0mi@(%sZU>Xdb0Ru96CFqk9-L3pzLVsMQ`Xpa~N6CR{9Rm2)A|CI21L(%GW zh&)Y$BNHa=FD+=mBw3{qTgw)j0b!Eahs!rZnpu)z!!E$*eXE~##yaXz`KE5(nQM`s zD!$vW9XH)iMxu9R>r$VlLk9oIR%HxpUiW=BK@4U)|1WNQ=mz9a z^!KkO=>GaJ!GBXm{KJj^;kh-MkUlEQ%lza`-G&}C5y1>La1sR6hT=d*NeCnuK%_LV zOXt$}iP6(YJKc9j-Fxq~*ItVUqljQ8?oaysB-EYtFQp9oxZ|5m0^Hq(qV!S+hq#g( z?|i*H2MIr^Kxgz+3vIljQ*Feejy6S4v~jKEPTF~Qhq!(ms5>NGtRgO5vfPPc4Z^AM zTj!`5xEreIN)vaNxa|q6qWdg>+T`Ol0Uz)ckXBXEGvPNEL3R8hB3=C5`@=SYgAju1 z!)UBr{2~=~xa{b8>x2@C7weRAEuatC)3pkRhT#pMPTpSbA|tan%U7NGMvzmF?c!V8 z=pEWxbdXbTAGtWTyI?Fml%lEr-^AE}w#l(<7OIw;ctw}imYax&vR4UYNJZK6P7ZOd zP87XfhnUHxCUHhM@b*NbTi#(-8|wcv%3BGNs#zRCVV(W?1Qj6^PPQa<{yaBwZ`+<`w|;rqUY_C z&AeyKwwf*q#OW-F()lir=T^<^wjK65Lif$puuU5+tk$;e_EJ;Lu+pH>=-8=PDhkBg z8cWt%@$Sc#C6F$Vd+0507;{OOyT7Hs%nKS88q-W!$f~9*WGBpHGgNp}=C*7!RiZ5s zn1L_DbKF@B8kwhDiLKRB@lsXVVLK|ph=w%_`#owlf@s@V(pa`GY$8h%;-#h@TsO|Y8V=n@*!Rog7<7Cid%apR|x zOjhHCyfbIt%+*PCveTEcuiDi%Wx;O;+K=W?OFUV%)%~6;gl?<0%)?snDDqIvkHF{ zyI02)+lI9ov42^hL>ZRrh*HhjF9B$A@=H94iaBESBF=eC_KT$8A@uB^6$~o?3Wm5t1OIaqF^~><2?4e3c&)@wKn9bD? zoeCs;H>b8DL^F&>Xw-xjZEUFFTv>JD^O#1E#)CMBaG4DX9bD(Wtc8Rzq}9soQ8`jf zeSnHOL}<+WVSKp4kkq&?SbETjq6yr@4%SAqOG=9E(3YeLG9dtV+8vmzq+6PFPk{L; z(&d++iu=^F%b+ea$i2UeTC{R*0Isk;vFK!no<;L+(`y`3&H-~VTdKROkdyowo1iqR zbVW(3`+(PQ2>TKY>N!jGmGo7oeoB8O|P_!Ic@ zZ^;3dnuXo;WJ?S+)%P>{Hcg!Jz#2SI(s&dY4QAy_vRlmOh)QHvs_7c&zkJCmJGVvV zX;Mtb>QE+xp`KyciG$Cn*0?AK%-a|=o!+7x&&yzHQOS>8=B*R=niSnta^Pxp1`=md z#;$pS$4WCT?mbiCYU?FcHGZ#)kHVJTTBt^%XE(Q};aaO=Zik0UgLcc0I(tUpt(>|& zcxB_|fxCF7>&~5eJ=Dpn&5Aj{A^cV^^}(7w#p;HG&Q)EaN~~EqrE1qKrMAc&WXIE;>@<&)5;gD2?={Xf@Mvn@OJKw=8Mgn z!JUFMwD+s==JpjhroT&d{$kQAy%+d`a*XxDEVxy3`NHzmITrE`o!;5ClXNPb4t*8P zzAivdr{j_v!=9!^?T3y?gzmqDWX6mkzhIzJ-3S{T5bcCFMr&RPDryMcdwbBuZbsgN zGrp@^i?rcfN7v0NKGzDPGE#4yszxu=I_`MI%Z|10nFjU-UjQXXA?k8Pk|OE<(?ae) zE%vG#eZAlj*E7_3dx#Zz4kMLj>H^;}33UAankJiDy5ZvEhrjr`!9eMD8COp}U*hP+ zF}KIYx@pkccIgyxFm#LNw~G&`;o&5)2`5aogs`1~7cMZQ7zj!%L4E`2yzlQN6REX20&O<9 zKV6fyr)TScJPPzNTC2gL+0x#=u>(({{D7j)c-%tvqls3#Y?Z1m zV5WUE)zdJ{$p>yX;^P!UcXP?UD~YM;IRa#Rs5~l+*$&nO(;Ers`G=0D!twR(0GF@c zHl9E5DQI}Oz74n zfKP>&$q0($T4y$6w(p=ERAFh+>n%iaeRA%!T%<^+pg?M)@ucY<&59$x9M#n+V&>}=nO9wCV{O~lg&v#+jcUj(tQ z`0u1YH)-`U$15a{pBkGyPL0THv1P|4e@pf@3IBZS4dVJPo#H>pWq%Lr0YS-SeWash z8R7=jb28KPMI|_lo#GEO|5B?N_e``H*23{~a!AmUJ+fb4HX-%QI@lSEUxKlGV7z7Q zSKw@-TR>@1RL%w{x}dW#k1NgW+q4yt2Xf1J62Bx*O^WG8OJ|FqI4&@d3_o8Id@*)4 zYrk=>@!wv~mh7YWv*bZhxqSmFh2Xq)o=m;%n$I?GSz49l1$xRpPu_^N(vZ>*>Z<04 z2+rP70oM=NDysd!@fQdM2OcyT?3T^Eb@lIC-UG=Bw{BjQ&P`KCv$AcJ;?`vdZ4){d z&gkoUK{$!$$K`3*O-jyM1~p-7T*qb)Ys>Myt^;#1&a%O@x8A+E>! zY8=eD`ZG)LVagDLBeHg>=atOG?Kr%h4B%E6m@J^C+U|y)XX@f z8oyJDW|9g=<#f<{JRr{y#~euMnv)`7j=%cHWLc}ngjq~7k**6%4u>Px&W%4D94(r* z+akunK}O0DC2A%Xo9jyF;DobX?!1I(7%}@7F>i%&nk*LMO)bMGg2N+1iqtg+r(70q zF5{Msgsm5GS7DT`kBsjMvOrkx&|EU!{{~gL4d2MWrAT=KBQ-^zQCUq{5PD1orxlIL zq;CvlWx#f1NWvh`hg011I%?T_s!e38l*lWVt|~z-PO4~~1g)SrJ|>*tXh=QfXT)%( z+ex+inPvD&O4Ur;JGz>$sUOnWdpSLcm1X%aQDw4{dB!cnj`^muI$CJ2%p&-kULVCE z>$eMR36kN$wCPR+OFDM3-U(VOrp9k3)lI&YVFqd;Kpz~K)@Fa&FRw}L(SoD z9B4a+hQzZT-BnVltst&=kq6Y(f^S4hIGNKYBgMxGJ^;2yrO}P3;r)(-I-CZ)26Y6? z&rzHI_1GCvGkgy-t1E;r^3Le30|%$ebDRu2+gdLG)r=A~Qz`}~&L@aGJ{}vVs_GE* zVUjFnzHiXfKQbpv&bR&}l2bzIjAooB)=-XNcYmrGmBh(&iu@o!^hn0^#}m2yZZUK8 zufVm7Gq0y`Mj;9b>`c?&PZkU0j4>IL=UL&-Lp3j&47B5pAW4JceG{!XCA)kT<%2nqCxj<)uy6XR_uws~>_MEKPOpAQ!H zkn>FKh)<9DwwS*|Y(q?$^N!6(51O0 z^JM~Ax{AI1Oj$fs-S5d4T7Z_i1?{%0SsIuQ&r8#(JA=2iLcTN+?>wOL532%&dMYkT z*T5xepC+V6zxhS@vNbMoi|i)=rpli@R9~P!39tWbSSb904ekv7D#quKbgFEMTb48P zuq(VJ+&L8aWU(_FCD$3^uD!YM%O^K(dvy~Wm2hUuh6bD|#(I39Xt>N1Y{ZqXL`Fg6 zKQ?T2htHN!(Bx;tV2bfTtIj7e)liN-29s1kew>v(D^@)#v;}C4-G=7x#;-dM4yRWm zyY`cS21ulzMK{PoaQ6xChEZ}o_#}X-o}<&0)$1#3we?+QeLt;aVCjeA)hn!}UaKt< zat1fHEx13y-rXNMvpUUmCVzocPmN~-Y4(YJvQ#db)4|%B!rBsgAe+*yor~}FrNH08 z3V!97S}D7d$zbSD{$z;@IYMxM6aHdypIuS*pr_U6;#Y!_?0i|&yU*@16l z*dcMqDQgfNBf}?quiu4e>H)yTVfsp#f+Du0@=Kc41QockXkCkvu>FBd6Q+@FL!(Yx z2`YuX#eMEiLEDhp+9uFqME_E^faV&~9qjBHJkIp~%$x^bN=N)K@kvSVEMdDuzA0sn z88CBG?`RX1@#hQNd`o^V{37)!w|nA)QfiYBE^m=yQKv-fQF+UCMcuEe1d4BH7$?>b zJl-r9@0^Ie=)guO1vOd=i$_4sz>y3x^R7n4ED!5oXL3@5**h(xr%Hv)_gILarO46q+MaDOF%ChaymKoI6JU5Pg;7#2n9-18|S1;AK+ zgsn6;k6-%!QD>D?cFy}8F;r@z8H9xN1jsOBw2vQONVqBVEbkiNUqgw~*!^##ht>w0 zUOykwH=$LwX2j&nLy=@{hr)2O&-wm-NyjW7n~Zs9UlH;P7iP3 zI}S(r0YFVYacnKH(+{*)Tbw)@;6>%=&Th=+Z6NHo_tR|JCI8TJiXv2N7ei7M^Q+RM z?9o`meH$5Yi;@9XaNR#jIK^&{N|DYNNbtdb)XW1Lv2k{E>;?F`#Pq|&_;gm~&~Zc9 zf+6ZE%{x4|{YdtE?a^gKyzr}dA>OxQv+pq|@IXL%WS0CiX!V zm$fCePA%lU{%pTKD7|5NJHeXg=I0jL@$tOF@K*MI$)f?om)D63K*M|r`gb9edD1~Y zc|w7N)Y%do7=0{RC|AziW7#am$)9jciRJ?IWl9PE{G3U+$%FcyKs_0Cgq`=K3@ttV z9g;M!3z~f_?P%y3-ph%vBMeS@p7P&Ea8M@97+%XEj*(1E6vHj==d zjsoviB>j^$_^OI_DEPvFkVo(BGRo%cJeD){6Uckei=~1}>sp299|IRjhXe)%?uP0I zF5+>?0#Ye}T^Y$u_rc4=lPcq4K^D(TZG-w30-YiEM=dcK+4#o*>lJ8&JLi+3UcpZk z!^?95S^C0ja^jwP`|{<+3cBVog$(mRdQmadS+Vh~z zS@|P}=|z3P6uS+&@QsMp0no9Od&27O&14zHXGAOEy zh~OKpymK5C%;LLb467@KgIiVwYbYd6wFxI{0-~MOGfTq$nBTB!{SrWmL9Hs}C&l&l#m?s*{tA?BHS4mVKHAVMqm63H<|c5n0~k)-kbg zXidai&9ZUy0~WFYYKT;oe~rytRk?)r8bptITsWj(@HLI;@=v5|XUnSls7$uaxFRL+ zRVMGuL3w}NbV1`^=Pw*0?>bm8+xfeY(1PikW*PB>>Tq(FR`91N0c2&>lL2sZo5=VD zQY{>7dh_TX98L2)n{2OV=T10~*YzX27i2Q7W86M4$?gZIXZaBq#sA*{PH8){|GUi;oM>e?ua7eF4WFuFYZSG| zze?srg|5Ti8Og{O zeFxuw9!U+zhyk?@w zjsA6(oKD=Ka;A>Ca)oPORxK+kxH#O@zhC!!XS4@=swnuMk>t+JmLmFiE^1aX3f<)D@`%K0FGK^gg1a1j>zi z2KhV>sjU7AX3F$SEqrXSC}fRx64GDoc%!u2Yag68Lw@w9v;xOONf@o)Lc|Uh3<21ctTYu-mFZuHk*+R{GjXHIGq3p)tFtQp%TYqD=j1&y)>@zxoxUJ!G@ zgI0XKmP6MNzw>nRxK$-Gbzs}dyfFzt>#5;f6oR27ql!%+{tr+(`(>%51|k`ML} zY4eE)Lxq|JMas(;JibNQds1bUB&r}ydMQXBY4x(^&fY_&LlQC)3hylc$~8&~|06-D z#T+%66rYbHX%^KuqJED_wuGB+=h`nWA!>1n0)3wZrBG3%`b^Ozv6__dNa@%V14|!D zQ?o$z5u0^8`giv%qE!BzZ!3j;BlDlJDk)h@9{nSQeEk!z9RGW) z${RSF3phEM*ce*>Xdp}585vj$|40=&S{S-GTiE?Op*vY&Lvr9}BO$XWy80IF+6@%n z5*2ueT_g@ofP#u5pxb7n*fv^Xtt7&?SRc{*2Ka-*!BuOpf}neHGCiHy$@Ka1^Dint z;DkmIL$-e)rj4o2WQV%Gy;Xg(_Bh#qeOsTM2f@KEe~4kJ8kNLQ+;(!j^bgJMcNhvklP5Z6I+9Fq@c&D~8Fb-4rmDT!MB5QC{Dsb;BharP*O;SF4& zc$wj-7Oep7#$WZN!1nznc@Vb<_Dn%ga-O#J(l=OGB`dy=Sy&$(5-n3zzu%d7E#^8`T@}V+5B;PP8J14#4cCPw-SQTdGa2gWL0*zKM z#DfSXs_iWOMt)0*+Y>Lkd=LlyoHjublNLefhKBv@JoC>P7N1_#> zv=mLWe96%EY;!ZGSQDbZWb#;tzqAGgx~uk+-$+2_8U`!ypbwXl z^2E-FkM1?lY@yt8=J3%QK+xaZ6ok=-y%=KXCD^0r!5vUneW>95PzCkOPO*t}p$;-> ze5j-BLT_;)cZQzR2CEsm@rU7GZfFtdp*a|g4wDr%8?2QkIGasRfDWT-Dvy*U{?IHT z*}wGnzdlSptl#ZF^sf)KT|BJs&kLG91^A6ls{CzFprZ6-Y!V0Xysh%9p%iMd7HLsS zN+^Un$tDV)T@i!v?3o0Fsx2qI(AX_$dDkBzQ@fRM%n zRXk6hb9Py#JXUs+7)w@eo;g%QQ95Yq!K_d=z{0dGS+pToEI6=Bo8+{k$7&Z zo4>PH(`ce8E-Ps&uv`NQ;U$%t;w~|@E3WVOCi~R4oj5wP?%<*1C%}Jq%a^q~T7u>K zML5AKfQDv6>PuT`{SrKHRAF+^&edg6+5R_#H?Lz3iGoWo#PCEd0DS;)2U({{X#zU^ zw_xv{4x7|t!S)>44J;KfA|DC?;uQ($l+5Vp7oeqf7{GBF9356nx|&B~gs+@N^gSdd zvb*>&W)|u#F{Z_b`f#GVtQ`pYv3#||N{xj1NgB<#=Odt6{eB%#9RLt5v zIi|0u70`#ai}9fJjKv7dE!9ZrOIX!3{$z_K5FBd-Kp-&e4(J$LD-)NMTp^_pB`RT; zftVVlK2g@+1Ahv2$D){@Y#cL#dUj9*&%#6 zd2m9{1NYp>)6=oAvqdCn5#cx{AJ%S8skUgMglu2*IAtd+z1>B&`MuEAS(D(<6X#Lj z?f4CFx$)M&$=7*>9v1ER4b6!SIz-m0e{o0BfkySREchp?WdVPpQCh!q$t>?rL!&Jg zd#heM;&~A}VEm8Dvy&P|J*eAV&w!&Nx6HFV&B8jJFVTmgLaswn!cx$&%JbTsloz!3 zMEz1d`k==`Ueub_JAy_&`!ogbwx27^ZXgFNAbx=g_I~5nO^r)}&myw~+yY*cJl4$I znNJ32M&K=0(2Dj_>@39`3=FX!v3nZHno_@q^!y}%(yw0PqOo=);6Y@&ylVe>nMOZ~ zd>j#QQSBn3oaWd;qy$&5(5H$Ayi)0haAYO6TH>FR?rhqHmNOO+(})NB zLI@B@v0)eq!ug`>G<@htRlp3n!EpU|n+G+AvXFrWSUsLMBfL*ZB`CRsIVHNTR&b?K zxBgsN0BjfB>UVcJ|x%=-zb%OV7lmZc& zxiupadZVF7)6QuhoY;;FK2b*qL0J-Rn-8!X4ZY$-ZSUXV5DFd7`T41c(#lAeLMoeT z4%g655v@7AqT!i@)Edt5JMbN(=Q-6{=L4iG8RA%}w;&pKmtWvI4?G9pVRp|RTw`g0 zD5c12B&A2&P6Ng~8WM2eIW=wxd?r7A*N+&!Be7PX3s|7~z=APxm=A?5 zt>xB4WG|*Td@VX{Rs)PV0|yK`oI3^xn(4c_j&vgxk_Y3o(-`_5o`V zRTghg6%l@(qodXN;dB#+OKJEEvhfcnc#BeO2|E(5df-!fKDZ!%9!^BJ_4)9P+9Dq5 zK1=(v?KmIp34r?z{NEWnLB3Px{XYwy-akun4F7xTRr2^zeYW{gcK9)>aJDdU5;w5@ zak=<+-PLH-|04pelTb%ULpuuuJC7DgyT@D|p{!V!0v3KpDnRjANN12q6SUR3mb9<- z>2r~IApQGhstZ!3*?5V z8#)hJ0TdZg0M-BK#nGFP>$i=qk82DO z7h;Ft!D5E15OgW)&%lej*?^1~2=*Z5$2VX>V{x8SC+{i10BbtUk9@I#Vi&hX)q
Q!LwySI{Bnv%Sm)yh{^sSVJ8&h_D-BJ_YZe5eCaAWU9b$O2c z$T|{vWVRtOL!xC0DTc(Qbe`ItNtt5hr<)VijD0{U;T#bUEp381_y`%ZIav?kuYG{iyYdEBPW=*xNSc;Rlt6~F4M`5G+VtOjc z*0qGzCb@gME5udTjJA-9O<&TWd~}ysBd(eVT1-H82-doyH9RST)|+Pb{o*;$j9Tjs zhU!IlsPsj8=(x3bAKJTopW3^6AKROHR^7wZ185wJGVhA~hEc|LP;k7NEz-@4p5o}F z`AD6naG3(n=NF9HTH81=F+Q|JOz$7wm9I<+#BSmB@o_cLt2GkW9|?7mM;r!JZp89l zbo!Hp8=n!XH1{GwaDU+k)pGp`C|cXkCU5%vcH)+v@0eK>%7gWxmuMu9YLlChA|_D@ zi#5zovN_!a-0?~pUV-Rj*1P)KwdU-LguR>YM&*Nen+ln8Q$?WFCJg%DY%K}2!!1FE zDv-A%Cbwo^p(lzac&_TZ-l#9kq`mhLcY3h9ZTUVCM(Ad&=EriQY5{jJv<5K&g|*Lk zgV%ILnf1%8V2B0E&;Sp4sYbYOvvMebLwYwzkRQ#F8GpTQq#uv=J`uaSJ34OWITeSGo6+-8Xw znCk*n{kdDEi)Hi&u^)~cs@iyCkFWB2SWZU|Uc%^43ZIZQ-vWNExCCtDWjqHs;;tWf$v{}0{p0Rvxkq``)*>+Akq%|Na zA`@~-Vfe|+(AIlqru+7Ceh4nsVmO9p9jc8}HX^W&ViBDXT+uXbT#R#idPn&L>+#b6 zflC-4C5-X;kUnR~L>PSLh*gvL68}RBsu#2l`s_9KjUWRhiqF`j)`y`2`YU(>3bdBj z?>iyjEhe-~$^I5!nn%B6Wh+I`FvLNvauve~eX<+Ipl&04 zT}};W&1a3%W?dJ2=N#0t?e+aK+%t}5q%jSLvp3jZ%?&F}nOOWr>+{GFIa%wO_2`et z=JzoRR~}iKuuR+azPI8;Gf9)z3kyA4EIOSl!sRR$DlW}0>&?GbgPojmjmnln;cTqCt=ADbE zZ8GAnoM+S1(5$i8^O4t`ue;vO4i}z0wz-QEIVe5_u03;}-!G1NyY8;h^}y;tzY}i5 zqQr#Ur3Fy8sSa$Q0ys+f`!`+>9WbvU_I`Sj;$4{S>O3?#inLHCrtLy~!s#WXV=oVP zeE93*Nc`PBi4q@%Ao$x4lw9vLHM!6mn3-b_cebF|n-2vt-zYVF_&sDE--J-P;2WHo z+@n2areE0o$LjvjlV2X7ZU@j+`{*8zq`JR3gKF#EW|#+{nMyo-a>nFFTg&vhyT=b} zDa8+v0(Dgx0yRL@ZXOYIlVSZ0|MFizy0VPW8;AfA5|pe!#j zX}Py^8fl5SyS4g1WSKKtnyP+_PoOwMMwu`(i@Z)diJp~U54*-miOchy7Z35eL>^M z4p<-aIxH4VUZgS783@H%M7P9hX>t{|RU7$n4T(brCG#h9e9p! z+o`i;EGGq3&pF;~5V~eBD}lC)>if$w%Vf}AFxGqO88|ApfHf&Bvu+xdG)@vuF}Yvk z)o;~k-%+0K0g+L`Wala!$=ZV|z$e%>f0%XoLib%)!R^RoS+{!#X?h-6uu zF&&KxORdZU&EwQFITIRLo(7TA3W}y6X{?Y%y2j0It!ekU#<)$qghZtpcS>L3uh`Uj z7GY;6f$9qKynP#oS3$$a{p^{D+0oJQ71`1?OAn_m8)UGZmj3l*ZI)`V-a>MKGGFG< z&^jg#Ok%(hhm>hSrZ5;Qga4u(?^i>GiW_j9%_7M>j(^|Om$#{k+^*ULnEgzW_1gCICtAD^WpC`A z{9&DXkG#01Xo)U$OC(L5Y$DQ|Q4C6CjUKk1UkPj$nXH##J{c8e#K|&{mA*;b$r0E4 zUNo0jthwA(c&N1l=PEe8Rw_8cEl|-eya9z&H3#n`B$t#+aJ03RFMzrV@gowbe8v(c zIFM60^0&lCFO10NU4w@|61xiZ4CVXeaKjd;d?sv52XM*lS8XiVjgWpRB;&U_C0g+`6B5V&w|O6B*_q zsATxL!M}+$He)1eOWECce#eS@2n^xhlB4<_Nn?yCVEQWDs(r`|@2GqLe<#(|&P0U? z$7V5IgpWf09uIf_RazRwC?qEqRaHyL?iiS05UiGesJy%^>-C{{ypTBI&B0-iUYhk> zIk<5xpsuV@g|z(AZD+C-;A!fTG=df1=<%nxy(a(IS+U{ME4ZbDEBtcD_3V=icT6*_ z)>|J?>&6%nvHhZERBtjK+s4xnut*@>GAmA5m*OTp$!^CHTr}vM4n(X1Q*;{e-Rd2BCF-u@1ZGm z!S8hJ6L=Gl4T_SDa7Xx|-{4mxveJg=ctf`BJ*fy!yF6Dz&?w(Q_6B}WQVtNI!BVBC zKfX<>7vd6C96}XAQmF-Jd?1Q4eTfRB3q7hCh0f!(JkdWT5<{iAE#dKy*Jxq&3a1@~ z8C||Dn2mFNyrUV|<-)C^_y7@8c2Fz+2jrae9deBDu;U}tJ{^xAdxCD248(k;dCJ%o z`y3sADe>U%suxwwv~8A1+R$VB=Q?%U?4joI$um;aH+eCrBqpn- z%79D_7rb;R-;-9RTrwi9dPlg8&@tfWhhZ(Vx&1PQ+6(huX`;M9x~LrW~~#3{j0Bh2kDU$}@!fFQej4VGkJv?M4rU^x!RU zEwhu$!CA_iDjFjrJa`aocySDX16?~;+wgav;}Zut6Mg%C4>}8FL?8)Kgwc(Qlj{@#2Pt0?G`$h7P#M+qoXtlV@d}%c&OzO+QYKK`kyXaK{U(O^2DyIXCZlNQjt0^8~8JzNGrIxhj}}M z&~QZlbx%t;MJ(Vux;2tgNKGlAqphLq%pd}JG9uoVHUo?|hN{pLQ6Em%r*+7t^<);X zm~6=qChlNAVXNN*Sow->*4;}T;l;D1I-5T{Bif@4_}=>l`tK;qqDdt5zvisCKhMAH z#r}`)7VW?LZqfdmXQ%zo5bJ00{Xb9^YKrk0Nf|oIW*K@(=`o2Vndz}ZDyk{!u}PVx zzd--+_WC*U{~DH3{?GI64IB+@On&@9X>EUAo&L+G{L^dozaI4C3G#2wr~hseW@K&g zKWs{uHu-9Je!3;4pE>eBltKUXb^*hG8I&413)$J&{D4N%7PcloU6bn%jPxJyQL?g* z9g+YFFEDiE`8rW^laCNzQmi7CTnPfwyg3VDHRAl>h=In6jeaVOP@!-CP60j3+#vpL zEYmh_oP0{-gTe7Or`L6x)6w?77QVi~jD8lWN@3RHcm80iV%M1A!+Y6iHM)05iC64tb$X2lV_%Txk@0l^hZqi^%Z?#- zE;LE0uFx)R08_S-#(wC=dS&}vj6P4>5ZWjhthP=*Hht&TdLtKDR;rXEX4*z0h74FA zMCINqrh3Vq;s%3MC1YL`{WjIAPkVL#3rj^9Pj9Ss7>7duy!9H0vYF%>1jh)EPqvlr6h%R%CxDsk| z!BACz7E%j?bm=pH6Eaw{+suniuY7C9Ut~1cWfOX9KW9=H><&kQlinPV3h9R>3nJvK z4L9(DRM=x;R&d#a@oFY7mB|m8h4692U5eYfcw|QKwqRsshN(q^v$4$)HgPpAJDJ`I zkqjq(8Cd!K!+wCd=d@w%~e$=gdUgD&wj$LQ1r>-E=O@c ze+Z$x{>6(JA-fNVr)X;*)40Eym1TtUZI1Pwwx1hUi+G1Jlk~vCYeXMNYtr)1?qwyg zsX_e*$h?380O00ou?0R@7-Fc59o$UvyVs4cUbujHUA>sH!}L54>`e` zHUx#Q+Hn&Og#YVOuo*niy*GU3rH;%f``nk#NN5-xrZ34NeH$l`4@t);4(+0|Z#I>Y z)~Kzs#exIAaf--65L0UHT_SvV8O2WYeD>Mq^Y6L!Xu8%vnpofG@w!}R7M28?i1*T&zp3X4^OMCY6(Dg<-! zXmcGQrRgHXGYre7GfTJ)rhl|rs%abKT_Nt24_Q``XH{88NVPW+`x4ZdrMuO0iZ0g` z%p}y};~T5gbb9SeL8BSc`SO#ixC$@QhXxZ=B}L`tP}&k?1oSPS=4%{UOHe0<_XWln zwbl5cn(j-qK`)vGHY5B5C|QZd5)W7c@{bNVXqJ!!n$^ufc?N9C-BF2QK1(kv++h!>$QbAjq)_b$$PcJdV+F7hz0Hu@ zqj+}m0qn{t^tD3DfBb~0B36|Q`bs*xs|$i^G4uNUEBl4g;op-;Wl~iThgga?+dL7s zUP(8lMO?g{GcYpDS{NM!UA8Hco?#}eNEioRBHy4`mq!Pd-9@-97|k$hpEX>xoX+dY zDr$wfm^P&}Wu{!%?)U_(%Mn79$(ywvu*kJ9r4u|MyYLI_67U7%6Gd_vb##Nerf@>& z8W11z$$~xEZt$dPG}+*IZky+os5Ju2eRi;1=rUEeIn>t-AzC_IGM-IXWK3^6QNU+2pe=MBn4I*R@A%-iLDCOHTE-O^wo$sL_h{dcPl=^muAQb`_BRm};=cy{qSkui;`WSsj9%c^+bIDQ z0`_?KX0<-=o!t{u(Ln)v>%VGL z0pC=GB7*AQ?N7N{ut*a%MH-tdtNmNC+Yf$|KS)BW(gQJ*z$d{+{j?(e&hgTy^2|AR9vx1Xre2fagGv0YXWqtNkg*v%40v?BJBt|f9wX5 z{QTlCM}b-0{mV?IG>TW_BdviUKhtosrBqdfq&Frdz>cF~yK{P@(w{Vr7z2qKFwLhc zQuogKO@~YwyS9%+d-zD7mJG~@?EFJLSn!a&mhE5$_4xBl&6QHMzL?CdzEnC~C3$X@ zvY!{_GR06ep5;<#cKCSJ%srxX=+pn?ywDwtJ2{TV;0DKBO2t++B(tIO4)Wh`rD13P z4fE$#%zkd=UzOB74gi=-*CuID&Z3zI^-`4U^S?dHxK8fP*;fE|a(KYMgMUo`THIS1f!*6dOI2 zFjC3O=-AL`6=9pp;`CYPTdVX z8(*?V&%QoipuH0>WKlL8A*zTKckD!paN@~hh zmXzm~qZhMGVdQGd=AG8&20HW0RGV8X{$9LldFZYm zE?}`Q3i?xJRz43S?VFMmqRyvWaS#(~Lempg9nTM$EFDP(Gzx#$r)W&lpFKqcAoJh-AxEw$-bjW>`_+gEi z2w`99#UbFZGiQjS8kj~@PGqpsPX`T{YOj`CaEqTFag;$jY z8_{Wzz>HXx&G*Dx<5skhpETxIdhKH?DtY@b9l8$l?UkM#J-Snmts7bd7xayKTFJ(u zyAT&@6cAYcs{PBfpqZa%sxhJ5nSZBPji?Zlf&}#L?t)vC4X5VLp%~fz2Sx<*oN<7` z?ge=k<=X7r<~F7Tvp9#HB{!mA!QWBOf%EiSJ6KIF8QZNjg&x~-%e*tflL(ji_S^sO ztmib1rp09uon}RcsFi#k)oLs@$?vs(i>5k3YN%$T(5Or(TZ5JW9mA6mIMD08=749$ z!d+l*iu{Il7^Yu}H;lgw=En1sJpCKPSqTCHy4(f&NPelr31^*l%KHq^QE>z>Ks_bH zjbD?({~8Din7IvZeJ>8Ey=e;I?thpzD=zE5UHeO|neioJwG;IyLk?xOz(yO&0DTU~ z^#)xcs|s>Flgmp;SmYJ4g(|HMu3v7#;c*Aa8iF#UZo7CvDq4>8#qLJ|YdZ!AsH%^_7N1IQjCro

K7UpUK$>l@ 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 E2O(~oYXATM literal 0 HcmV?d00001 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradle/wrapper/gradle-wrapper.properties" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradle/wrapper/gradle-wrapper.properties" new file mode 100644 index 00000000..be52383e --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradle/wrapper/gradle-wrapper.properties" @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradlew" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradlew" new file mode 100755 index 00000000..4f906e0c --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradlew" @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradlew.bat" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradlew.bat" new file mode 100644 index 00000000..ac1b06f9 --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/gradlew.bat" @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/Calculator.class" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/Calculator.class" new file mode 100644 index 0000000000000000000000000000000000000000..12381faf10a5d37d3237e000c793c36b919bc89d GIT binary patch literal 785 zcma)&zi-n}5XZk~J4tc#qZrDs1Zr4F7#aq)A|$Aa6e++E6p4)&+e%$t?8>z(W(E{d z1~w{GAtABB!hk9j1UvtV{Wl=)IZ=YD4z={|?%lilobUVR@6j&+cVL?+;&KUB7Em{# zp;5xs60Q-7cm2SR?-BH7t4}c2L)RnJx_;n2PDTSSdMXBzGgdcrgzSsRSNCbsh&TNm zLbu+vxj>G-XkjrZ;B{p;+__jGTZ?tNZW%oTz;A4OQ24|p=z@|>8k-0aSiy*ToN z;aaPY>nO0U>MMZM-?2Tzw>EoH*;|L8Zyaba*%tF8VUgqVq=0>eZ-gppY*q6EuGZNb z^~UqB?Eml8^Im)MKJDd7Ea7aKznBChcJHE8&c8rT)ApqQOh^2@{UTui3-+C1#6~)HC5q4-cMDQ<06L|F8u>Q C0D3(D literal 0 HcmV?d00001 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/Operator.class" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/Operator.class" new file mode 100644 index 0000000000000000000000000000000000000000..5dd38e6387feb72d9f49a801d4b7288db735f080 GIT binary patch literal 2099 zcmaJ?ZF3V<6n<`!cDKtG+5{++KtlnWq(bFIKnf@z)j*&?v06}Jn{3OL%?s%+0-{y~ ztrTY%W*BjtVH`$>5Bi~$G40q9zxz{Ye}OZK&)uX=g^ZJ#bMHORJ?EbDoO3pR{`1=t z0Ne15hBkC5cuT?Cbx7cl20spK@F6M15fw)@bmN$Y<2X@=m(Zi&q=I);^lGTbyBbyR zDd^MCh%SkrQgK>Zye~B$sQ6H>XH=Y(tD&M_t||FcT7!uJ1%nz|(52#>TrDYvq&P2O zTR}!aR=_{(W&}inyR6*R?zXa)vzNzctXCj#AeS};mL#pLdDPAHn}w4`zfDarnM)aV zuTik%xvUI0=d57?E!mwn3x<;`bPCj1*}UuU2^uX+4jC7X4%^5Mb{xEvGV_j=%kqw| ze?VYG3AAz@``v*7vtXuAm`2)^KKw?ZAP_pez`VyPSlK~h^*xS}I)B8-dog%~?*b+QzMdvb0eWp-JTf%>^5H_4=Q zwBu!Z_Y!;|2Z5DyKtj^N=uIP2%1=Q~M;;fXhk_KtIvltRD5Bt^j*oCj!DSs+@Uf04 zVkDvpivq0`ZNj$ALBrlx7<4mc)|n?lVDs$g&$IV$KOG;5%-+2|Gj=O7^UKtn;{J`9 zAAXv-eQ);L(b=27&Ww%DjQzMtMs!ujUcAoyD}?BX%TPqSj!*EZj?XZ{(?%Vidz-k9 zYu=_q#}^pUaUC}le5vCrj0!YWLM_#CziZhnHA#K?`11sW=jy8DOB6#Hy}s^{{sW3s1x78||Xdo0a@3b21xMCbc%As{;5V|ShhtS5QlPPtS|aP1gOVLJZxn`2 z9+^%xN1WoSdPZGqUT_VYlklGlCDJ-$r{s*K(~L8kNW|!dpM`$PjB8V-t&5a7ImHzg zk8%FWeM}ZhElF}0s5y0cdC4aGfoMWBYA6RvAB{H#= zpUO6Vfql^AuyCizPUY%{kTXiTk*5x>f@@8D65_j?+Y%T#F9VS zr_k_-p2OI{0CoD2@3unq-Uu?>FcuSQB)WuwH()D5*ny>9OcCCX@y=HM#rP0pvae!0 zEyMinz)t#oji(TN&uH#buuDNFgo51~_7Dj0g3eSp&81XCh7JQno=l^$Z<3$&z@BjY z$phSthXZFz351xy(MkgG@Rs1xB9?uJQ2PWHO(0anaxcx}5^8!5TH!(4CA9K6sM&*7 zNobV^HOxB<6Pmzk`Y&QlxaRDhhtJOQJdG9x840c}qSeFJ6|ugE4U*6XtiqakLJyG~ zpoz4uBoZdpLUgq!W2Ac<*5OU8=O5|@oFR=v?3yd&>;~z*!$N;gy9X@I@1$KeL!2zN zl!^Cqy@xk=(mmRE literal 0 HcmV?d00001 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/main.class" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/main.class" new file mode 100644 index 0000000000000000000000000000000000000000..22666d2c80681a2846fb2f69a2d72a06040bad8f GIT binary patch literal 453 zcmZvYy-or_6ot=amt9y95ETClJFt+%*kNppCMFvxFf>-fI>8|@ONLqFYguV5d;lNH zcxN?kV=?#V+*ZJ=B%{hG!gT$Fv|76qHiD7iW%`jC_P}e%Y;t%KAwpu(Vq)F?T@Tc zdOFDI!c2L;{m+;XT|FmqX;rFMA@;Z*rI|_OwQ}dHj(p;vHH4^y*stLL6+*K(G@Q(2 zVi{jZe@H@QxRgfN)DX%_FEfiHc>FN{@hc*Ip?$ESI|p7jyMLnNLb^# v_Orlwox3XPXfVW?Px(2s|AtcGjd<#gc}yw%KAPBIz2)}V)#kU!bqQPFR%B67 literal 0 HcmV?d00001 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/settings.gradle" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/settings.gradle" new file mode 100644 index 00000000..64cf2835 --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/settings.gradle" @@ -0,0 +1,2 @@ +rootProject.name = 'javastudy' + diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/src/main/java/Calculator.java" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/src/main/java/Calculator.java" new file mode 100644 index 00000000..a5398c12 --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/src/main/java/Calculator.java" @@ -0,0 +1,20 @@ +public class Calculator { + public int add(int a, int b) { + return a + b; + } + + public int sub(int a, int b) { + return a - b; + } + + public int mul(int a, int b) { + return a * b; + } + + public int div(int a, int b) { + if (b == 0) { + throw new IllegalArgumentException("숫자 0으로 나눌 수 없습니다."); + } + return a / b; + } +} diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/src/main/java/Operator.java" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/src/main/java/Operator.java" new file mode 100644 index 00000000..642a632b --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/src/main/java/Operator.java" @@ -0,0 +1,48 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class Operator { + private static int sum; + private static int num; + + public static void inputFormula() throws Exception { + BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); + String arr[] = bf.readLine().split(" "); + + // 문자 입력 예외 처리 + try { + sum = Integer.parseInt(arr[0]); + } catch (Exception e) { + throw new IllegalArgumentException("숫자가 아닌 문자가 입력되었습니다."); + } + + executeCalc(arr); + } + + public static void executeCalc(String[] arr) throws Exception { + Calculator calculator = new Calculator(); + + for (int i = 1; i < arr.length; i = i + 2) { + // 문자 입력 예외 처리 + try { + num = Integer.parseInt(arr[i + 1]); + } catch (Exception e) { + throw new IllegalArgumentException("숫자가 아닌 문자가 입력되었습니다."); + } + + // 계산 + if (arr[i].equals("+")) { + sum = calculator.add(sum, num); + } else if (arr[i].equals("-")) { + sum = calculator.sub(sum, num); + } else if (arr[i].equals("*")) { + sum = calculator.mul(sum, num); + } else if (arr[i].equals("/")) { + sum = calculator.div(sum, num); + } + + System.out.println(sum); + } + System.out.println("계산 값 : " + sum); + } +} diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/src/main/java/main.java" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/src/main/java/main.java" new file mode 100644 index 00000000..1fea8015 --- /dev/null +++ "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/src/main/java/main.java" @@ -0,0 +1,6 @@ +public class main { + public static void main(String[] args) throws Exception { + Operator operator = new Operator(); + operator.inputFormula(); + } +} \ No newline at end of file From 5fd4a44030d9e4f3721c422af654333a28b36d97 Mon Sep 17 00:00:00 2001 From: jeongyuneo Date: Thu, 28 Jan 2021 13:36:49 +0900 Subject: [PATCH 07/11] =?UTF-8?q?docs:=20.idea=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/2021-Java-Study.iml | 9 ---- .idea/modules.xml | 8 ---- .idea/vcs.xml | 6 --- .idea/workspace.xml | 87 --------------------------------------- 4 files changed, 110 deletions(-) delete mode 100644 .idea/2021-Java-Study.iml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml delete mode 100644 .idea/workspace.xml diff --git a/.idea/2021-Java-Study.iml b/.idea/2021-Java-Study.iml deleted file mode 100644 index d6ebd480..00000000 --- a/.idea/2021-Java-Study.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 7fabbc98..00000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1ddf..00000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index 1767edef..00000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1611241723426 - - - - - - - - - \ No newline at end of file From c66cdf2b1687d86df2672ea86a83012f8d05acac Mon Sep 17 00:00:00 2001 From: jeongyuneo Date: Fri, 29 Jan 2021 15:57:38 +0900 Subject: [PATCH 08/11] fix: untracked files --- .../executionHistory/executionHistory.bin" | Bin 20095 -> 0 bytes .../executionHistory/executionHistory.lock" | Bin 17 -> 0 bytes .../.gradle/6.7/fileChanges/last-build.bin" | Bin 1 -> 0 bytes .../.gradle/6.7/fileHashes/fileHashes.bin" | Bin 18697 -> 0 bytes .../.gradle/6.7/fileHashes/fileHashes.lock" | Bin 17 -> 0 bytes .../.gradle/6.7/gc.properties" | 0 .../buildOutputCleanup.lock" | Bin 17 -> 0 bytes .../buildOutputCleanup/cache.properties" | 2 - .../buildOutputCleanup/outputFiles.bin" | Bin 18695 -> 0 bytes .../.gradle/checksums/checksums.lock" | Bin 17 -> 0 bytes .../.gradle/checksums/md5-checksums.bin" | Bin 19097 -> 0 bytes .../.gradle/checksums/sha1-checksums.bin" | Bin 19847 -> 0 bytes .../configuration-cache/gc.properties" | 0 .../.gradle/vcs-1/gc.properties" | 0 .../.idea/.gitignore" | 8 -- .../.idea/compiler.xml" | 6 - .../.idea/gradle.xml" | 19 --- .../.idea/jarRepositories.xml" | 20 --- .../.idea/misc.xml" | 10 -- .../.idea/modules/javastudy.iml" | 2 - .../.idea/uiDesigner.xml" | 124 ------------------ .../out/production/classes/Calculator.class" | Bin 785 -> 0 bytes .../out/production/classes/Operator.class" | Bin 2099 -> 0 bytes .../out/production/classes/main.class" | Bin 453 -> 0 bytes 24 files changed, 191 deletions(-) delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/executionHistory/executionHistory.bin" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/executionHistory/executionHistory.lock" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileChanges/last-build.bin" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileHashes/fileHashes.bin" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileHashes/fileHashes.lock" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/gc.properties" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/buildOutputCleanup.lock" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/cache.properties" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/outputFiles.bin" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/checksums.lock" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/md5-checksums.bin" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/sha1-checksums.bin" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/configuration-cache/gc.properties" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/vcs-1/gc.properties" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/.gitignore" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/compiler.xml" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/gradle.xml" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/jarRepositories.xml" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/misc.xml" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/modules/javastudy.iml" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/uiDesigner.xml" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/Calculator.class" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/Operator.class" delete mode 100644 "4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/main.class" diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/executionHistory/executionHistory.bin" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/executionHistory/executionHistory.bin" deleted file mode 100644 index d0be37703cc60e78271e226958ece27a124ffaa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20095 zcmeI%KTH!*90%|#RRct^#+YD?aS#U*>Cu+9KwKaNA^rg=Rk!o??v)-K?d82YYK;R? z5=|f|CQ2g4kpU7gnz$j0MhA(M!G*ZEx#8ew@cQQhqz-N9V9fWDyZhzdd%xd%pT1s) zh6JJBwOu%bo#Vt#hzJ4@fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwx`|3x5TEu=QT znELZo+2CkO5SkBLfumVIb+hWo{L6fEPlx^gfql20H|E=Lg#ZK~009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG|gUl8yK z!XdwPHf7H_s*JQK#wgQbLwNW@;;qDY8 zx=xwy69qj^LXrZ_hw(!zB33P9a5*MYD!pUs%}UP5;GH$ ztR=b0sHee>ypq=&X!Utww6)nE@G3rEltiO3+UD^E{3Ph}w7I?n8t0y0t4aS}lFr>e zSr@FHB212}W3-cSTD?@tN*nr#5zls?xj4`fy4)p2!d(MWPv4a;J6E=YbGiT|Dk?Yl zO!msusA;IlL?vqNN%)t7&vq9K$BEY;2%DqAo?(M&omRgsY0aTs)6Wi@={Te~XUSnI8(bVFV}u)~k}l*;xvg diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/executionHistory/executionHistory.lock" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/executionHistory/executionHistory.lock" deleted file mode 100644 index 959d179d77ea329e712a37e1d9af022978dbe859..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZR6Y%aEdwJ~0a0Ror-C9?wF diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileChanges/last-build.bin" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileChanges/last-build.bin" deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileHashes/fileHashes.bin" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileHashes/fileHashes.bin" deleted file mode 100644 index 11a0cd6ca980fc78803c0516f228b5ac5d3f8e10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18697 zcmeI%KS%;$9LDk2{tO*K78Gs~4N*jeCP_pP-4N86OF;xRxJ5+>(I5piIG0mnK@Jf~ zV;S^^0}(ulnsksLT#AO4KwMGA-Baf4>K#u65I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL z_=`Y5miy)Iake*J^0d!?*|ROmQ9UEg?!<#K_>$iYr>^gd~ZE_7o-HH1~)xGDIX)5E96S}a|@T>jkBjU(0Q H+IJd1V{Lrj diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileHashes/fileHashes.lock" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/fileHashes/fileHashes.lock" deleted file mode 100644 index 52d2069943bb8e9a576904c66e2597fd0a089530..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZS13O;FE{bJ)q1_)pS05@9%r~m)} diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/gc.properties" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/6.7/gc.properties" deleted file mode 100644 index e69de29b..00000000 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/buildOutputCleanup.lock" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/buildOutputCleanup.lock" deleted file mode 100644 index 21179b86ce8e8154041e6abf1f42ec5e69df3542..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZSH_i@j^=9~A9FhBqw08oYoc>n+a diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/cache.properties" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/cache.properties" deleted file mode 100644 index c3705314..00000000 --- "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/cache.properties" +++ /dev/null @@ -1,2 +0,0 @@ -#Fri Jan 22 11:48:08 KST 2021 -gradle.version=6.7 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/outputFiles.bin" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/buildOutputCleanup/outputFiles.bin" deleted file mode 100644 index 4d3b986bbd2abb489a799445c53332cd6e76cee9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18695 zcmeI%ODIH97{Ku}HXb9-)Xa{Zq$o|4Qc74%HX2z;9*wdP7E?CXO0p7(oy9C@Bt;gc zrWgy0k;jHvAayr3Vxh#j?)NpxPATbs>zsS~pKkY_-}ZJG6DWI^%jB-A+>#Xn2q1s} z0tg_000IagfB*srAbEMdyeE2cA$?B! zq;rtjyI=Q9U)8R6V|+nxj~M|35I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|00D-?L&}2WW&<>wF+^OVCvEi4>&))U@sn7BOnq8;B diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/checksums.lock" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/checksums.lock" deleted file mode 100644 index 44cc4908a29fb35c4976b7adda97d9585a72cdf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZRcyI81oQv{nb0|aOS04W{=Hvj+t diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/md5-checksums.bin" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/md5-checksums.bin" deleted file mode 100644 index 1f007ac83b4e679862bcb652abd66f2ac61dfecb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19097 zcmeI){Yw*J00;1MnwlOtD|1D*YAq^e%}lTt%4J~=&CnJ|mSi)d&>)SKL6m7_5~M|< zsI!+r5N=Us{veUT9INmp!jMKoe5ow8C{tIl?s%RD$@>F>_#WKu;d}SJ=ef_XyKNiC zDdb+daZ_8^)DR;GKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1pXHRgYY0hhd)w4siA^g7AeG2@43UVPTlzTI?=pL7m!`O{YAKKjY})fkZ+=xr`m zRt=AlMm_xnfZtVVqitbJw%VAsIBP-Ry~q+zA8FidAaewZ|EDxSOJbAKseZtK69y zVcnwD9a7-<5@}=p+OEiN=KV#dYj<6E;!uUtMg^&a?U6Q`%X-IaG8~yo=a6dX>1YgT nSX89JUy?RD0@VCRW7F2d!EO7NRiz2P^AJ~MX(Ele$Hm4UF@QGe diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/sha1-checksums.bin" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/checksums/sha1-checksums.bin" deleted file mode 100644 index a5865ade6edc990cae4ea437564d7b21f301329c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19847 zcmeI4drVVT9LFy(1f-0jAmCsS2oFKR7*#eVN>c)q#~736jN*!56nSjIDoPljh)#Lw zK!MW2(9-a*WxRv((2N0sNQ40nFgh8c#LWWBL>#-9bI;6L|MV~OJITHGr5KK;FEt-tcW>u=A%O{8r7-Yxz`{gE!n@_E?(P{5m{QH4mJmT!e8OK(X`|QTK zs9f_w^ak%-lyd`cE;;Gro3f{nNneMJ^O}DogR*GTK>9kpIB)Rp*OM*|CDPZ)#CaR1 zuqa#3>ZHfp;JiK8X>f=0@C3?z%W>XuKPQ>x8urUenmh<-v z#)T7NI_Kb=#Y*X~%DCEua{oY_f7~Z7j&!KVL^<~v&e`3M1dprj;!y6p1?Pbm7nvFE zEidSN6z3uOUe`^8--%G}r-So|y>{wf4EE4|e9r%uOL_er=hltWH%~P_Fw=EfB`T72EYIq00UqE z41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq00UqE z41fVJ@TLqnlNWLzH!Et>HxB-!GDa)s?lWHd_Fpyo$IfW5$+yB)__pq)(WoNhFnRp& z|J2T?gGUA(?M5dJ;~X0n-yMt{uRn+=AsbQay_BgiGqqF8M-0T*%F>4twq7$S?dY{c zl!#tYU_ia8{zhtXKHautTxeD`r6F7x`Bo>FpZBnyu0_99Z?H+Z7W;YNb*bDtEX{>T z&CL(m-+EzVJfg}P(7fKsQ>KD)EyIp?diT~O2y z?ugQ(R!=C@%2zM6xiMW*mJ}0^6jiV(_DnU497Iu<5JWJjwFwH;=ujs2f>)+qRJaMp z&x%)c$-gmxrp_VEAVitc8A&<3$Tyq4)8=q%;F0`Eg8pYhL|rDIHq{u^Itztb?d?p? z-@3k9X*LD2KN)Vz{S_PqOh^Shs2HDKzB=85KZ;0QiK-yBoyz^w(I>?vy#{x^EFPxapsi^ z8uBtvMAd~N%Jel3^Hgqh-4`-nIxyxtX9t8=3dPan+81hG4d{DArT4OOt>N+cCok)^ z3^aQ(cs2V&<|;(qKO(A;nh)8Pw<}Y}duLq!QrRseR7*-s17|;%oM?HDsAk?OrRFrI lOjU^I3OkuuK_2yeP8sQ%S}tL8Q~~l1TP#*7Rf!2j{R{0hsPX^+ diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/configuration-cache/gc.properties" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/configuration-cache/gc.properties" deleted file mode 100644 index e69de29b..00000000 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/vcs-1/gc.properties" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.gradle/vcs-1/gc.properties" deleted file mode 100644 index e69de29b..00000000 diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/.gitignore" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/.gitignore" deleted file mode 100644 index 73f69e09..00000000 --- "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/.gitignore" +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/compiler.xml" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/compiler.xml" deleted file mode 100644 index 61a9130c..00000000 --- "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/compiler.xml" +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/gradle.xml" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/gradle.xml" deleted file mode 100644 index 02b3e5bf..00000000 --- "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/gradle.xml" +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - \ No newline at end of file diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/jarRepositories.xml" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/jarRepositories.xml" deleted file mode 100644 index fdc392fe..00000000 --- "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/jarRepositories.xml" +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/misc.xml" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/misc.xml" deleted file mode 100644 index da956e3e..00000000 --- "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/misc.xml" +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/modules/javastudy.iml" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/modules/javastudy.iml" deleted file mode 100644 index 1dd3549c..00000000 --- "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/modules/javastudy.iml" +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/uiDesigner.xml" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/uiDesigner.xml" deleted file mode 100644 index e96534fb..00000000 --- "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/.idea/uiDesigner.xml" +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/Calculator.class" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/Calculator.class" deleted file mode 100644 index 12381faf10a5d37d3237e000c793c36b919bc89d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 785 zcma)&zi-n}5XZk~J4tc#qZrDs1Zr4F7#aq)A|$Aa6e++E6p4)&+e%$t?8>z(W(E{d z1~w{GAtABB!hk9j1UvtV{Wl=)IZ=YD4z={|?%lilobUVR@6j&+cVL?+;&KUB7Em{# zp;5xs60Q-7cm2SR?-BH7t4}c2L)RnJx_;n2PDTSSdMXBzGgdcrgzSsRSNCbsh&TNm zLbu+vxj>G-XkjrZ;B{p;+__jGTZ?tNZW%oTz;A4OQ24|p=z@|>8k-0aSiy*ToN z;aaPY>nO0U>MMZM-?2Tzw>EoH*;|L8Zyaba*%tF8VUgqVq=0>eZ-gppY*q6EuGZNb z^~UqB?Eml8^Im)MKJDd7Ea7aKznBChcJHE8&c8rT)ApqQOh^2@{UTui3-+C1#6~)HC5q4-cMDQ<06L|F8u>Q C0D3(D diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/Operator.class" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/Operator.class" deleted file mode 100644 index 5dd38e6387feb72d9f49a801d4b7288db735f080..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2099 zcmaJ?ZF3V<6n<`!cDKtG+5{++KtlnWq(bFIKnf@z)j*&?v06}Jn{3OL%?s%+0-{y~ ztrTY%W*BjtVH`$>5Bi~$G40q9zxz{Ye}OZK&)uX=g^ZJ#bMHORJ?EbDoO3pR{`1=t z0Ne15hBkC5cuT?Cbx7cl20spK@F6M15fw)@bmN$Y<2X@=m(Zi&q=I);^lGTbyBbyR zDd^MCh%SkrQgK>Zye~B$sQ6H>XH=Y(tD&M_t||FcT7!uJ1%nz|(52#>TrDYvq&P2O zTR}!aR=_{(W&}inyR6*R?zXa)vzNzctXCj#AeS};mL#pLdDPAHn}w4`zfDarnM)aV zuTik%xvUI0=d57?E!mwn3x<;`bPCj1*}UuU2^uX+4jC7X4%^5Mb{xEvGV_j=%kqw| ze?VYG3AAz@``v*7vtXuAm`2)^KKw?ZAP_pez`VyPSlK~h^*xS}I)B8-dog%~?*b+QzMdvb0eWp-JTf%>^5H_4=Q zwBu!Z_Y!;|2Z5DyKtj^N=uIP2%1=Q~M;;fXhk_KtIvltRD5Bt^j*oCj!DSs+@Uf04 zVkDvpivq0`ZNj$ALBrlx7<4mc)|n?lVDs$g&$IV$KOG;5%-+2|Gj=O7^UKtn;{J`9 zAAXv-eQ);L(b=27&Ww%DjQzMtMs!ujUcAoyD}?BX%TPqSj!*EZj?XZ{(?%Vidz-k9 zYu=_q#}^pUaUC}le5vCrj0!YWLM_#CziZhnHA#K?`11sW=jy8DOB6#Hy}s^{{sW3s1x78||Xdo0a@3b21xMCbc%As{;5V|ShhtS5QlPPtS|aP1gOVLJZxn`2 z9+^%xN1WoSdPZGqUT_VYlklGlCDJ-$r{s*K(~L8kNW|!dpM`$PjB8V-t&5a7ImHzg zk8%FWeM}ZhElF}0s5y0cdC4aGfoMWBYA6RvAB{H#= zpUO6Vfql^AuyCizPUY%{kTXiTk*5x>f@@8D65_j?+Y%T#F9VS zr_k_-p2OI{0CoD2@3unq-Uu?>FcuSQB)WuwH()D5*ny>9OcCCX@y=HM#rP0pvae!0 zEyMinz)t#oji(TN&uH#buuDNFgo51~_7Dj0g3eSp&81XCh7JQno=l^$Z<3$&z@BjY z$phSthXZFz351xy(MkgG@Rs1xB9?uJQ2PWHO(0anaxcx}5^8!5TH!(4CA9K6sM&*7 zNobV^HOxB<6Pmzk`Y&QlxaRDhhtJOQJdG9x840c}qSeFJ6|ugE4U*6XtiqakLJyG~ zpoz4uBoZdpLUgq!W2Ac<*5OU8=O5|@oFR=v?3yd&>;~z*!$N;gy9X@I@1$KeL!2zN zl!^Cqy@xk=(mmRE diff --git "a/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/main.class" "b/4\354\243\274\354\260\250/\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274\354\240\2341/out/production/classes/main.class" deleted file mode 100644 index 22666d2c80681a2846fb2f69a2d72a06040bad8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453 zcmZvYy-or_6ot=amt9y95ETClJFt+%*kNppCMFvxFf>-fI>8|@ONLqFYguV5d;lNH zcxN?kV=?#V+*ZJ=B%{hG!gT$Fv|76qHiD7iW%`jC_P}e%Y;t%KAwpu(Vq)F?T@Tc zdOFDI!c2L;{m+;XT|FmqX;rFMA@;Z*rI|_OwQ}dHj(p;vHH4^y*stLL6+*K(G@Q(2 zVi{jZe@H@QxRgfN)DX%_FEfiHc>FN{@hc*Ip?$ESI|p7jyMLnNLb^# v_Orlwox3XPXfVW?Px(2s|AtcGjd<#gc}yw%KAPBIz2)}V)#kU!bqQPFR%B67 From dd8f6c777b49a2a8390ec7afcd20415902c19066 Mon Sep 17 00:00:00 2001 From: jeongyuneo Date: Mon, 1 Feb 2021 15:59:26 +0900 Subject: [PATCH 09/11] =?UTF-8?q?docs:=20=EA=B0=9D=EC=B2=B4=EC=A7=80?= =?UTF-8?q?=ED=96=A5=20=EC=98=A4=ED=83=80=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" "b/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" index 6c3c7cb2..e70b8e7b 100644 --- "a/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" +++ "b/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" @@ -14,7 +14,7 @@ ### 2-1. 역할 역할은 관련성 높은 책임의 집합이다. 객체의 역할은 사람의 역할과 유사하게 다음과 같은 특징을 가진다. - 여러 객체가 동일한 역할을 수해할 수 있다. -- 역할은 개체 가능성을 의미한다. +- 역할은 대체 가능성을 의미한다. - 각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있다. - 하나의 객체가 동시에 여러 역할을 수행할 수 있다. From e66fea4b065e028b01aa370eaf71135ce2e14994 Mon Sep 17 00:00:00 2001 From: jeongyuneo Date: Mon, 1 Feb 2021 16:22:26 +0900 Subject: [PATCH 10/11] =?UTF-8?q?docs:=20VO=20=EC=84=A4=EB=AA=85=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "4\354\243\274\354\260\250/VO(Value Object).md" | 9 +++++---- ...354\261\205\354\236\204, \355\230\221\353\240\245.md" | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git "a/4\354\243\274\354\260\250/VO(Value Object).md" "b/4\354\243\274\354\260\250/VO(Value Object).md" index 48f88704..6ce19c05 100644 --- "a/4\354\243\274\354\260\250/VO(Value Object).md" +++ "b/4\354\243\274\354\260\250/VO(Value Object).md" @@ -1,7 +1,8 @@ # [Java] VO(Value Object) ## 1. VO(Value Object)란 -VO(Value Object)란 말 그대로 값 객체라는 의미를 가지고 있다. -VO의 핵심 역할은 **equals()**와 **hashcode()**를 오버라이딩 하는 것이다. 즉, VO 내부에 선언된 속성(필드)의 모든 값들이 VO 객체마다 값이 같아야 같은 객체라고 판별한다. +VO(Value Object)란 말 그대로 값 객체라는 의미를 가지고 있다. 즉, 데이터를 담는 객체이다. +VO는 데이터베이스에서 한 테이블에 대한 컬럼들과 매칭하여 사용하는 것으로 많이 사용된다. +VO의 핵심 역할은 **equals()** 와 **hashcode()** 를 오버라이딩 하는 것이다. 즉, VO 내부에 선언된 속성(필드)의 모든 값들이 VO 객체마다 값이 같아야 같은 객체라고 판별한다. ## 2. Value Object 기본 특성 **Value Object**에는 기본 특성이 있다. @@ -12,9 +13,9 @@ VO의 핵심 역할은 **equals()**와 **hashcode()**를 오버라이딩 하는 ### 2-1. Immutability(불변성) - 수정자(Setter)가 없음 Value Object는 **불변**이다. -불변이라는 뜻은 한번 생성되면 이후 내부 값을 바꿀 수 없음을 의미한다. 즉 **(수정자)Setter를 허용하지 않는다**는 말이다. +불변이라는 뜻은 한번 생성되면 이후 내부 값을 바꿀 수 없음을 의미한다. 즉 **수정자(Setter)를 허용하지 않는다**는 말이다. -쉽게 말하면, 생성자에게 하나 혹은 그 이상의 파라미터가 주입돼서 객체가 만들어지면, 돌아갈 수 없음을 의미한다. 해당 객체는 **GC(Garbage Collector)**에 의해 폐기될 때까지 동일함을 보장한다. +쉽게 말하면, 생성자에게 하나 혹은 그 이상의 파라미터가 주입돼서 객체가 만들어지면, 돌아갈 수 없음을 의미한다. 해당 객체는 **GC(Garbage Collector)** 에 의해 폐기될 때까지 동일함을 보장한다. - Hassle-free Sharing(번거로움없는 공유) Value Object는 코드의 다른 부분에서 수정되지 않기 때문에 **Reference(참조)로 공유**할 수 있다. 이는 side effect를 피하기 위해 사용되는 코드의 복잡성과 부하를 극적으로 감소시키며, 멀티스레드 환경에서 그 이점이 뚜렷해진다. diff --git "a/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" "b/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" index e70b8e7b..acc0260d 100644 --- "a/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" +++ "b/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" @@ -2,7 +2,7 @@ ## 1. 객체 지향이란 객체지향의 목표는 실세계를 모방하는 것이 아닌 새로운 세계를 창조하는 것이다. -객체를 스스로 생각하고 스스로 결정하는 현실 세계의 생명체에 비유하는 것은 상태와 행위를 **'캡슐화'**하는 소프트웨어 객체의 **'자율성'**을 설명하는 데 효과적이다. 현실 세계의 사람들이 암묵적인 약속과 명시적인 계약을 기반으로 목표를 달성해 나가는 과정은 **'메시지'**를 주고받으며 공동의 목표를 달성하기 위해 **'협력'**하는 객체들의 관계를 설명하는 데 적합하다. +객체를 스스로 생각하고 스스로 결정하는 현실 세계의 생명체에 비유하는 것은 상태와 행위를 **'캡슐화'** 하는 소프트웨어 객체의 **'자율성'** 을 설명하는 데 효과적이다. 현실 세계의 사람들이 암묵적인 약속과 명시적인 계약을 기반으로 목표를 달성해 나가는 과정은 **'메시지'** 를 주고받으며 공동의 목표를 달성하기 위해 **'협력'** 하는 객체들의 관계를 설명하는 데 적합하다. 객체지향이란 - 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다. From 77ceba8c8063029687903d1db8097468fa804b51 Mon Sep 17 00:00:00 2001 From: jeongyuneo Date: Tue, 2 Feb 2021 17:33:51 +0900 Subject: [PATCH 11/11] =?UTF-8?q?docs:=20=EA=B0=9D=EC=B2=B4=20=EC=A7=80?= =?UTF-8?q?=ED=96=A5=20=EC=BD=94=EB=A9=98=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... \354\261\205\354\236\204, \355\230\221\353\240\245.md" | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git "a/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" "b/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" index acc0260d..d5bc73c0 100644 --- "a/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" +++ "b/4\354\243\274\354\260\250/\352\260\235\354\262\264 \354\247\200\355\226\245-\354\227\255\355\225\240, \354\261\205\354\236\204, \355\230\221\353\240\245.md" @@ -27,7 +27,7 @@ 역할의 대체 가능성은 행위 호환성을 의미하고, 행위 호환성은 동일한 책임의 수행을 의미한다. ### 2-2. 책임 -책임이란 객체가 어떤 행동을 하라고 다른 객체로부터 요청을 수신했을 때 요청을 처리하기 위해 객체가 수행하는 행동이다. +책임이란 객체가 어떤 행동을 하라고 다른 객체로부터 요청을 수신했을 때 요청을 처리하기 위해 객체가 수행하는 행동 즉, 메시지를 수신받았을 때 그 메시지의 요청을 처리하기 위해 수행하는 행동이다. 객체의 책임은 크게 두 가지 범주로 분류된다. - 하는 것 @@ -71,6 +71,7 @@ - 오버라이딩(Overriding), 오버로딩(Overloading) - 오버라이딩(Overriding) : 부모 클래스의 메소드와 같은 이름을 사용하며 매개변수도 같되, 내부 소스를 재정의하는 것 - 오버로딩(Overloading) : 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출하여 사용하는 것 +- 다형성은 메시지 수신자의 종류를 캡슐화한다. ## 4. 정리 객체 지향의 기본 개념은 책임을 수행하는 자율적인 객체들의 협력을 통해 애플리케이션을 구축하는 것이다. 객체지향의 세계에서 객체들이 서로 협력하기 위해 사용할 수 있는 유일한 방법은 **메시지**를 전송하는 것이다. @@ -81,7 +82,9 @@ 객체 지향 설계의 중심에는 메시지가 위치한다. 객체가 메시지를 선택하는 것이 아니라 메시지가 객체를 선택하게 된다. 메시지가 객체를 선택하게 만드려면 메시지를 중심으로 협력을 설계해야 한다. -책임-주도 설계의 핵심은 어떤 행위가 필요한지를 먼저 결정한 후에 이 행위를 수행할 객체를 결정하는 것이다. 이 과정을 흔히 What/Who 사이클이라고 한다. +책임-주도 설계란 책임을 찾고 책임을 수행할 적절한 객체를 찾아 책임을 할당하는 방식으로 협력을 설계하는 방법을 말한다. +책임-주도 설계의 핵심은 어떤 행위가 필요한지를 먼저 결정한 후에 이 행위를 수행할 객체를 결정하는 것이다. 즉, '어떻게'가 아닌 '무엇을'을 먼저 생각하는 것이다. +이 과정을 흔히 What/Who 사이클이라고 한다. > 결론적으로 협력이라는 문맥 안에서 필요한 메시지를 먼저 결정한 후에 메시지를 수신하기에 적합한 객체를 선택한다. 그리고 수신된 메시지가 객체의 책임을 결정한다.