Java(28)
-
[패캠강의] 빌더패턴
Builder 패턴 Builder 패턴 객체를 생성할 때 단계적 생성에 중점을 두는 패턴입니다. 동일한 생성 과정을 통해 다른 구현을 할 수 있다는 것이 큰 특징입니다. 객체 협력 예시 Builder : 인터페이스나 추상클래스 Concrete Builder : Builder를 구현한 클래스 Director : Builder를 사용해 Product를 생성 Product : 결과물 예제코드 MakeReport(Builder)를 textReport, HTMLReport 등으로 다양하게 구현할 수 있습니다. public interface MakeReport { String makeHeader(); String makeBody(); String makeConclusion(); String getReport(); ..
2022.01.15 -
[Java] Mac class
Javax.crypto.Mac 클래스 Mac class Javax Mac 클래스는 MAC(Message Authentication Code) 알고리즘 기능을 제공해줍니다. MAC은 서로 공유하는 secret key가 있을 때, 전송되는 정보의 유효성을 검증하고 요청에 대한 응답을 처리해주기 위해 사용됩니다. 따라서 MAC은 secret key를 기반으로 전송되는 데이터들에 대한 보안 기능을 한다고 볼 수 있습니다. MAC의 메커니즘은 암호화 해시기능에 기반하는데, 이러한 매커니즘을 HMAC이라고 합니다. HMAC은 어떤 해시기능 (e.g., SHA256, SHA384)과도 같이 사용하며, secret key와 조합해서 사용합니다. [위 내용은 아래 참고자료(Java docs)를 번역한 내용입니다.] 예제..
2022.01.13 -
[패캠강의] 프로토 타입 패턴
[패캠강의] 프로토 타입 패턴 복잡한 클래스의 인스턴스를 생성할 때 하나의 견본(prototype)을 만들어 초기화해두고 이를 복제해서 객체를 사용하는 방법입니다. (Java clone() 메서드라고 생각하시면 됩니다.) 예제코드를 보면 바로 이해할 수 있을 겁니다. 주의할 점은 Mark interface(override해야할 메서드가 없이 특성만 알려주는 인터페이스) Cloneable과 깊은 복사입니다. 참고로 Arrays.copyOf() 메서드도 깊은 복사를 채택합니다. //Arrays.copyOf() 메서드 docs, 새로운 배열을 만들어서 System.arraycopy 해줍니다. public static int[] copyOf(int[] original, int newLength) { int[] ..
2022.01.12 -
[객체지향코드] 캡슐화(Encapsulation)
캡슐화(Encapsulation) 객체 지향 코드를 얘기할 때 빠지지 않고 등장하는 용어중 하나입니다. 하지만 실무에서 많은 코드를 짜다보면 지나치기 쉬운 게 사실입니다. 책에서 두 가지 재밌는? 규칙을 설명해주고 있어서 소개해보려 합니다. 캡슐화 객체 지향 코드는 구현에 변경이 발생해도 다른 구현에 영향을 적게 준다는 장점이 있습니다. 캡슐화는 쉽게 설명해서 그런 객체 지향 코드의 장점을 살릴 수 있게끔 구현 변경에 유연함을 주는 방식입니다. 캡슐화를 위한 두 가지 규칙 Tell, Don't Ask 묻지말고 명령하라. 라는 첫 번째 규칙은 간단하게 말해 데이터를 가진 객체가 처리하도록 해라라는 얘기입니다. 예를 들어 age에 limit 기능을 두는 메서드가 있다면 데이터를 가진 객체에서 isAg..
2022.01.10 -
[IntroToDocker] JetBrains Intro to Docker[Part 2 Networking, Docker Compose]
JetBrains Intro to Docker[Part 2 Networking, Docker Compose] Web Application + Docker 웹 애플리케이션과 DB를 각각 Docker Container로 생성한 뒤 Docker compose를 활용해 서비스를 실행시켜 볼겁니다. Creating the DB Container docker pull mysql docker run --name app-db -d -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=myDB mysql M1 installing mysql Error M1 맥북은 docker pull mysql 명령어를 실행하면 ARM64를 지원하지 않기 때문에 오류가 발생합니다. 이때 docker p..
2022.01.03 -
[IntroToDocker] JetBrains Intro to Docker[Part 1 with Java Examples]
JetBrains Intro to Docker[Part 1 with Java Examples] 도커 컨테이너는 왜 필요할까요? A,B,C라는 팀원이 있는 스타트업이 있다고 해봅시다. A는 Java 8을, B는 Java 11을 사용할 때 매번 설정을 다시 해서 컴파일 실행해줘야 되는 번거로움이 발생합니다. 여기에 DB, AppServer(Apache, Openliberty...)가 추가된 Web App이라면 B는 AppServer, DB를 갖춰야 컴파일 실행할 수 있습니다. Java 버전 싱크로 맞춰야겠죠. 문제는 C,D,E... 더 많은 사람들이 실행할 필요가 있단 것입니다. 컨테이너는 뭔가요? 컨테이너는 App과 Dependencies를 패키지로 만들어 실행시켜주는 컴포넌트 입니다. 컨테이너들은 Shi..
2022.01.03