자바23 [Java] MVC 패턴의 오해와 고찰 | feat. Smalltalk-80, Dolphin Smalltalk MVP 모두가 다르게 말하는 디자인 패턴이 있다? 벌써 5개월 전이다. 온라인으로 자바 과제를 하는 코스에 참가해, 많은 학생과 코드 리뷰를 활발히 했었다. 자바 과제는 입력 / 비즈니스 요구사항 처리 / 출력의 형식에서 벗어나지 않았다. 코드 리뷰가 활발하다 보니 몇몇 기술 유행이 불처럼 번졌다. 그 중 하나가 바로 MVC(Model-View-Controller) 디자인 패턴이었다. 많은 학생이 MVC 패턴을 채택한 이유가 뭘까. 직관적이고 객체 지향적으로 분리되고 과제 구현에 최적화됐기 때문이라 생각한다. MVC 패턴을 코드 리뷰할 때, 신기한 점을 발견했다. 학생마다 MVC 패턴을 다르게 알고 있는 게 아닌가? 심지어 내가 이해한 MVC 패턴과도 달랐다. 왜 이런 일이 발생한걸까? (5개월 전 커뮤니티에서.. 자바/자바 강의 2024. 3. 25. [책 부수기] 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라 이펙티브 자바 아이템1 요약 정적 팩터리 메서드의 장점은 다음과 같습니다. 이름을 가질 수 있다. 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 생긴다. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다. 정적 팩터리 메서드의 단점은 다음과 같습니다. 상속을 하려면 public 이나 protected 생성자가 필요하니 정적 팩터리 메서드만 제공하면 하위 클래스를 만들 수 없다. 정적 팩터리 메서드는 프로그래머가 찾기 어렵다. 다음은 정적 팩터리 메서드에 흔히 사용하는 명명 방식들이다. from : 매개변수를 하나 받아서 해당 타입의 인스턴스를 .. 자바/자바 자료실 2023. 12. 7. Github PR 에서 ChatGPT 한테 코드리뷰 받기 요즘 ChatGPT 으로 코드를 물어보거나 개발을 물어보는 일이 상당히 많습니다. 최근에 만난 학생 주니어 개발자들도 대부분 다 ChatGPT 는 기본적으로 켜있더라고요. 꼭 개발자가 아니더라도 ChatGPT 활용을 안 하는 학생을 찾기가 어려웠습니다. 새삼 대화형 인공지능 서비스가 우리 생활에 많이 들어왔구나를 느꼈습니다. 🫢 ChatGPT 로 코드 리뷰 받기 어느 날 같이 모각코 하는 분의 코드를 리뷰했어요. 그런데 PR 에서 이미 많은 코멘트가 달렸더라고요?! 어찌된 일인지 봤는데 ChatGPT 로 보이는 말투(?)로 코드 리뷰들이 막 달렸더라고요. 물어보니 깃허브 액션(Github Action) 으로 ChatGPT 한테 코드 리뷰를 부탁하는 워크 플로우 스크립트를 작성하셨다고 했어요. 오오... .. 자바/자바 자료실 2023. 12. 3. [SonarLint] 내 코드 품질을 지켜주는 정적 코드 분석기 IntelliJ IDE 플러그인 설치하기 안녕하세요. 내 코드를 대신 리뷰해주고 코드 품질을 지켜주는 플러그인을 소개합니다. 바로 SonarLint 플러그인입니다. SonarLint - IntelliJ IDEs Plugin | Marketplace SonarLint is a free IDE extension to find and fix coding issues in real-time, flagging issues as you code, just like a spell-checker. More than a linter, it also... plugins.jetbrains.com SonarLint 가 뭐예요? 설치하면 어떤 점이 좋아요? SonarLint 는 실시간으로 코드 이슈를 찾고 고칩니다. IDE 편집기에서 스펠링 확인 기능처럼, 코드 품질.. 자바/자바 자료실 2023. 11. 29. [SOLID] 단일책임원칙(SRP)과 God Object(신 객체) 안녕하세요. 단일 책임 원칙과 신 객체가 무엇인지 알아보려고 합니다. 단일 책임 원칙 - 책임이란 뭘까? 단일 책임 원칙은 SOLID 원칙 중 S 에 해당합니다. Single Responsibility Principle (SRP) 이라고 불립니다. 아래는 위키 백과의 설명 중 일부입니다. 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. 클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부합해야 한다. ... 로버트 마틴은 책임을 변경하려는 이유로 정의하고, 어떤 클래스나 모듈은 변경하려는 단 하나 이유만을 가져야 한다고 결론 짓는다. 예를 들어서 보고서를 편집하고 출력하는 모듈을 생각해 보자. 이 모듈은 두 가지 이유로 변경될 수 있다. 첫 번째로 보고서의 내.. 자바/자바 자료실 2023. 11. 22. IntelliJ External Libraries 에서 JDK 버전 변경하기 안녕하세요, 다람쥐입니다. 원래 JDK 버전을 11 으로 사용하다가, 다른 프로젝트에서 JDK 버전을 17 으로 사용해야 할 일이 있습니다. 가끔 JDK 버전이 변경되지 않을 때가 있는데요. 그레이들 버전도 변경해야 하고, JDK 버전도 따로 변경해야 되더라고요. 설정하는 게 가끔 헷갈려서 포스팅 남깁니다. 우선, Gradle JVM 버전이 잘 변경되었는지 확인합니다. 맥 기준 CMD + , 으로 Settings 환경 설정 창을 엽니다. 위와 같이 Build, Execution, Deployment > Build Tools > Gradle 에서 Gradle JVM 버전이 17인지 확인합니다. 다음으로 프로젝트 폴더를 오른쯕 마우스 클릭하여, Open Module Settings 메뉴를 누릅니다. 맥 기준.. 자바/자바 자료실 2023. 11. 2. 인텔리제이(Intellij) 소스파일 및 테스트 결과 한글 깨짐 인텔리제이(Intellij) IDEA 2019.3.2 Ultimate Edition 프로그램에서 스프링 부트 프로젝트의 테스트 코드를 실행하고 그 결과를 얻는 사이드바의 Run 탭에서 한글이 담긴 테스트 함수의 이름이 깨지는 것을 확인했다. 인텔리제이에서 소스 파일을 읽고 바이트 코드를 만드는 과정에서 한글 문자열이 깨진 것 같다. 인텔리제이 프로그램 메뉴 중 Help -> Edit Custom VM Options.. 에서 다음 문구를 추가한다. -Dfile.encoding=UTF-8 다시 프로그램을 실행하고 테스트를 실행하면 한글 결과가 잘 뜬다. 자바/자바 자료실 2020. 4. 5. [디자인 패턴] 14. MVC 패턴 ( MVC Pattern ) 합성 패턴 ( Compound Pattern )간단하게 여러 디자인 패터을 적용한 방법을 뜻합니다.MVC는 다음의 패턴을 사용합니다.Strategy 패턴 : 뷰에 따라 알고리즘이 달라집니다.Observer 패턴 : 모델의 데이터가 변하면, 뷰에게도 전달해줍니다.Composite 패턴 : 중첩 컴포넌트 UI를 구현하기 위해 사용됩니다.MVC는 Model, View, Controller 로 구성됩니다. MVC 구조 MVC 서로 상호작용하는 구조 입니다. 자바/자바 자료실 2018. 12. 19. [디자인 패턴] 13. 방문자 패턴 ( Visitor Pattern ) 방문자 패턴 ( Visitor Pattern )런타임 중에 하나 이상의 연산을 객체 집합에 적용되도록 해줍니다. 객체 구조로부터 연산이 분리됩니다. 클래스 다이어그램시퀀스 다이어그램 예제 클래스 다이어그램 코드 중복 문제visitor.accept ( this ); 코드를 반복하는 이유는, Java의 Single Dispatch 문제 때문이다. 메소드 호출이 런타임이 아닌 컴파일 시에 결정이 된다. 메소드 오버로딩과 흡사해보이지만, 메소드 오버로딩은 컴파일 시에 결정이 된다. Java에서 Double Patch를 구현하려면, 메소드 내에서 동적 디스패치를 적용하면 된다. accept() 메소드를 갖고있는 인터페이스를 사용해서 동적으로 객체가 선택되게 한다.여러 클래스를 파라미터로 오버로딩되어있는 Visit.. 자바/자바 자료실 2018. 12. 19. [디자인 패턴] 12. 중재자 패턴 ( Mediator Pattern ) 중재자 패턴 ( Mediator Pattern )전혀 다른 객체 집합들이 서로 상호작용하는 방법을 캡슐화함으로써 결합도를 낮춰줍니다. 클래스 다이어그램 시퀀스 다이어그램 소스 코드import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; //Colleague interface interface Command { void execute(); } //Abstract Mediator interface Medi.. 자바/자바 자료실 2018. 12. 19. [디자인 패턴] 11. 스테이트 패턴 ( State Pattern ) 스테이트 패턴 ( State Pattern )객체 내부의 상태에 따라서, 객체가 다른 행동을 할 수 있게 해줍니다. 따라서, 객체의 상태만 변경해줘도 다른 행동을 하는 객체가 됩니다. 클래스 다이어그램 Strategy 패턴과 차이점처음에 배운 Strategy 패턴의 다이어그램은 다음과 같습니다. State 패턴과 클래스 다이어그램이 매우 흡사합니다. 다른 점은 그 '목적' 입니다. State 객체는 각 상태에 따른 행동을 캡슐화 합니다. 그리고 상태는 시간이 지나면 변화합니다.Strategy 객체는 알고리즘을 캡슐화 합니다. 서브클래스의 대안으로 매우 유연합니다. 자바/자바 자료실 2018. 12. 19. [디자인 패턴] 10. 컴포지트 패턴 ( Composite Pattern ) 컴포지트 패턴 ( Composite Pattern )같은 인터페이스로 객체가 독립적으로 다뤄지거나 객체의 집합으로 다뤄지는, 객체 계층의 생성을 도와줍니다. 클래스 다이어그램 Leaft 와 Composite가 같은 Component 클래스를 상속받는다. Composite 클래스는 Component 클래스를 자식으로 갖는다. 컴포지트 패턴을 구현하는 두 가지 방법1. Transparency를 위한 구현 모든 컴포넌트가 동일하게 다뤄줘야 한다는 것을 강조한다. 그러나, Leaf 클래스의 입장에서 add, remove, getChild 메소드가 필요 없기 때문에 보안 상의 문제가 있다. 2. Safety를 위한 구현Leaft 클래스에 Child 연산을 하면, 컴파일 시에 오류가 난다.그러나, Composite.. 자바/자바 자료실 2018. 12. 19. 이전 1 2 다음