TIL(Today I Learned)
-
TIL 25일차 (2021.11.15)TIL(Today I Learned) 2021. 11. 15. 17:43
TIL(2021.11.15)(Today 25) ✔ 변화에 대응하는 객체지향 설계(애자일 실행 관례) interface와 구현체의 분리 AppConfig 구현 (생성자 주입을 통한 관심사 분리) 구현체가 구현체에 의존하지 않도록 설정. 실제 동작에 필요한 "구현 객체를 생성" 생성한 객체 인스턴스의 참조를 "생성자를 통해 주입(연결)" 해준다. DI(Dependency Injection), 의존관계 주입 "사용 영역"과 "구성 영역"의 분리 SRP(한 클래스는 하나의 책임) 클라이언트는 실행만, AppConfig를 통해 연결과 구성요소를 생성 ] OCP(sw 확장에는 열려있으나 변경에는 닫혀있어야 한다.) 전제조건 : 다형성 + DIP 사용 영역과 구성 영역을 분리 그로 인해 구성 영역만 변경, 사용 영역..
-
TIL(24일차)(2021.11.14)TIL(Today I Learned) 2021. 11. 14. 16:49
SOLID 📌 SRP : 단일 책임 원칙 Single Responsibility Principle 하나의 클래스에는 하나의 책임만 가진다(책임의 크기는 클 수도, 작을 수도 있다.) 중요한것은 변경의 파급력이다. 변경의 파급이 적을 수록 단일 책임 원칙을 잘따른것이다. OCP : 개방-폐쇄 원칙 Open/Closed Principle 가장 중요한 원칙 소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀 있어야 한다. 즉, 코드 확장은 가능하지만 변경은 불가능하다는 역설적인 의미. 인터페이스를 구현한 클래스들의 변경은 가능하지만, 인터페이스 자체의 변경은 안된다는 의미. 다형성의 '역할'과 '구현'의 분리 하지만! 구현 자체를 변경하는것도 OCP를 위반하는 행위 그러므로 Ioc와 DI 등을 설정해줘서 ..
-
TIL(23일차)(2021.11.13)TIL(Today I Learned) 2021. 11. 13. 14:31
TIL(2021.11.13) spring data JPA📌 개발 생산성 대폭 증가 리포지토리에 구현 없이도 인터페이스 만으로 개발을 완료할 수 있다. 기본 CRUD 기능도 모두 제공 따라서 개발자는 핵심 비즈니스 로직을 개발하는데 집중할 수 있게된다. //SpringDataJpaMemberRepository.java public interface SpringDataJpaMemberRepository extends JpaRepository, MemberRepository { @Override Optional findByName(String name); } 데이터 JPA가 인터페이스를 받아서 자동으로 구현체와 스프링빈을 만들어준다. JpaRepository는 jpa에서 제공하는 기능으로 데이터 jpa가 인터..
-
TIL(22일차)(2021.11.12)TIL(Today I Learned) 2021. 11. 12. 14:22
Spring Framework의 장점📌 -> 객체지향 설계가 가능 -> 인터페이스를 지정하고 구현체를 사용자 임의대로 바꿀 수 있음.(DI 덕분에) -> 즉, memberService는 memberRepository를 의존하고 있고, 구현체로 memoryMemberReposotory와 , jdbcMemberRepository가 있다고 가정했을 때 -> 사용자 임의대로 memoryMemberRepository를 삭제하고 jdbcMemberRepository로 구현할 수 있다. -> 이는, SOLID에서 O(OCP, Open-Closed Principle) 즉, 개방-폐쇄의 원칙을 만족시킨다. -> 확장에는 열려있고, 수정에는 닫혀있다. 왜냐하면 기존 코드는 손대지 않고 새로운 jdbcMemberReposi..
-
TIL 21일차(11.11)TIL(Today I Learned) 2021. 11. 11. 15:17
정적 컨텐츠 실행 순서 -> 처음 클라이언트에 요청이 오게되면 내장 톰켓을 지나간다 -> 그리고, 컨트롤러에 요청이 있는지 확인한다(있다면 출력하고 정적 컨텐츠가 있다면 무시함.) @Controller public class HomeController{ @GetMapping("/") public String home() { return "home"; } }-> 컨트롤러에 아무런 요청이 없다면 정적 static.html을 출력한다. Hello hello MVC //createMemberForm.html file -> name="name"은 key역할 //Memcontroller.java file @PostMapping("/members/new") public String create(MemberForm f..
-
TIL 20일차 (2021.11.10)TIL(Today I Learned) 2021. 11. 10. 17:12
스프링 빈, 스프링 컨테이너 MVC 과정에서 Controller는 스프링 컨테이너에 저장되어있다가 호출되는 방식. 스프링빈 의존관계 추가(컴포넌트 스캔 방식) public class MemberController { private final MemberService memberService = new MemberService(); }-> 이 코드는 이미 MemberService가 다른 클래스 파일에 선언되어있으므로 new로 중복되어 안정적이지 못하다, 하나만 생성해서 공유하는 방식이 효율적이다.(DI 방식,) public class MemberController { private final MemberService memberService; // 스프링컨테이너 공용 사용 @Autowired public ..
-
TIL 19일차(2021.11.09), 단축키 TIP 모음, intellij create gitTIL(Today I Learned) 2021. 11. 9. 11:41
TestCase 작성 웹 애플리케이션을 통한 테스트는 시간이 많이 소요되고, 반복 실행이 어렵다, 여러테스트를 한번에 실행하기 어렵다는 단점이 있다. 그래서 Junit이라는 프레임워크로 테스트를 실행하여 이러한 문제점을 해결한다. 예시) // Junit Test @Test public void save(){ Member member = new Member(); member.setName("spring"); repository.save(member); Member result = repository.findById(member.getId()).get(); // System.out.println("result = " + (result == member); // junit Assertions // Assert..
-
TIL 18일차(2021.11.8)TIL(Today I Learned) 2021. 11. 8. 11:02
cmd창에서 java file 실행하기 java file의 directory로 이동 -> gradlew build -> build folder 안에 있는 lib folder로 이동 -> file이 jar형식이면 java -jar file name으로 실행 완료! +번외 build를 완전히 지우고 다시 받고 싶으면 gradlew clean build MVC란? 과거에는 View와 Controller를 분리하지 않고 하나의 View File에 몰아서 코딩했었는데, 현재는 View와 Controller를 분리하는것이 기본이 되었다. Tip! Thymeleaf는 파일 링크만 복사해도 서버가 필요없이 내용을 확인할 수 있다는 장점이 있다.(물론 동적인 파일에는 의미가 없다.) html이나 java 파일이 text..