전체 글 썸네일형 리스트형 [CS]객체 지향 설계의 5원칙(SOLID) 지금까지 객체지향 언어를 공부하면서 막연히 가장 많이 사용되는 개발언어라는 것만 알고 있었고, 정확히 어떤점에서 강점을 가지고, 그 강점을 살리기 위해서는 어떤 방식으로 구현해야 하는지에 대해서는 깊게 생각해보지 못했다. 클린 코드의 저자인 로버트 C.마틴의 논리에 따르면 좋은 객체지향 언어란 아래의 5가지 원칙을 가진다고 한다. 이 원칙들은 사실상 자바로 단순히 분류하기 보다는 소프트웨어 공학의 분야이다. 단일 책임 원칙(Single responsibility principle) : SRP ㄴ 한 클래스는 하나의 책임만 가져야 한다. 개방 폐쇄 원칙(Open/closed principle) : OCP ㄴ 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.(구현/분리) 리스코프 치환 원칙.. 더보기 [Java]Optional 자바개발자라면 가장 많이 겪게 되는 오류 중 하나가 NullPointerException(NPE)일 것이다. 그리고 지금까지의 고전적인 자바 개발 방식에서는 이러한 null 문제를 해결하기 위해 NPE가 발생할 수 있는 부분에 if문을 통한 검증을 늘 포함해주어야 했다. 예를들면 if(name != null){ } 과 같이 말이다. 또는 String name = ""; 과 같이 초기값을 지정해줘야 한다... null값이 도출되는 변수에 대해 자바8 이상 버전부터 지원하는 래퍼클래스가 Optional이다. Optional에서는 아래와 같이 제네릭 클래스로 모든 타입의 변수를 감싸줄 수 있다. Optional 클래스의 주요 메소드는 다음과 같다. 값이 비어있을 때 - Optional.empty() 값이 Nu.. 더보기 [Git]기본 에디터를 notepad++ 로 지정하는 방법 기본적으로 git bash를 통해 commit을 하면 커밋메세지를 입력하는 vi 에디터가 열리게 된다. 하지만 vi에디터 대신 다른 에디터를 기본으로 사용하고 싶을 경우가 있다. 내가 주로 사용하는 notepad++을 기준으로 변경하고자 한다면... 아래의 명령어를 통해 변경이 가능하다. -------------------------------------------------------------------------------------------------------------------------- git config --global core.editor "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession.. 더보기 [Spring]AOP(관점지향프로그래밍) 입문 스프링 프레임워크의 주요 특징 중 하나로 언급되는 것이 관점지향프로그래임(AOP)이다. 관점지향이란 무엇인가? 보통 자바로 구현하는 프로그래밍을 객체지향 프로그래밍(OOP)이라고 하는데, 이것과는 무엇이 다른가? 실무를 함에 있어, 모든 로직에 특정 기능을 추가해야 한다고 생각해보자, 이미 구현된 서비스상에 수많은 클래스에 모든 메소드를 추가할 것인가? 또는 하나의 로직을 객채로 만들었다고 한들.. 그 로직을 호출하는 부분을 모든 서비스에 붙여넣어주어야 하는가? 개발자의 중요한 덕목(?)중 하나는 바로 귀찮음이다. 이러한 귀찮은 행위를 반복하지 않기 위해 고민하고 발전해 나가는 것이 개발자일 것이다. 다행히도 스프링 프레임워크는 AOP를 통해 이러한 문제를 해결할 수 있다. 아래는 김영한 팀장님의 인프런.. 더보기 [Jpa]처음 접하는 Jpa 실무에서 jdbc(JdbcTemplate)와 mybatis만 사용하다가 이번 인프런 스프링 강의를 통해 Jpa를 처음 접해보게 되었다. 원래 개발자가 직접 쿼리를 작성하지 않고 객체를 통해 DB와 통신하는 기술임은 알고 있었지만, 직접 구현하여 보니 더 새롭게 느껴졌다. 사전에 설정이 필요하긴 하지만.. 단순히 DB에 접근하는 로직만 먼저 살펴보자면 먼저 도메인으로 생성한 변수들에 대해 @Entity어노테이션 설정과 primary key에 해당하는 값을 @Id로 지정한다 (여기에서 DB상의 id가 자동으로 증가하는 값으로 설정되어 있으므로..IDENTITY로 지정) Repository에서 EntityManager 객체를 import하여 생성자로 주입해준다. 이후 각 메소드들이 가지고 있는 기능을 생성한 .. 더보기 [Spring]form을 통해 값을 받을때 클래스와 변수로.. 지금까지 form 태그를 통해 넘겨준 값을 받을때는 늘 HttpServletRequest 객체를 통해 getParameter 메소드를 통해서 값을 넘겨받았었다. 이번 인프런 강의를 수강하면서 넘겨주는 input 값의 name 속성과 같은 이름의 변수명으로 받을 수 있음을 알게 되었다. 위와 같이 "name"이라는 input을 넘겨주고... 자바 클래스로 form 클래스를 생성해주고 마찬가지로 name 변수를 생성후 getter/setter 설정을 해준다 그 후 컨트롤러단에서 form 클래스를 매개변수로 하고 getter로 값을 받아올 수 있다 결국 스프링 구조에 대한 이해가 아직 부족하기 때문에 생소하게 느껴지는 것이다. 정답은 역시 공부..또 공부.. 더보기 [Spring]컴포넌트스캔 vs 스프링 빈 직접 등록 Controller, Service, Repository를 스프링이 인식할 수 있도록 등록해주는 방법은 두가지가 있다. 하나는 주로 편하게 사용하는 컴포넌트 스캔 원리를 사용하는 것이고 다른 하나는 자바빈으로 생성되도록 설정하여 직접 등록해주는 방법이다 전자는 @Component 어노테이션으로 가능한데, 주로 각 클래스의 용도에 맞게 어노테이션을 명명해주어도 된다. 즉, @Controller, @Service, @Repository 어노테이션은 모두 @Component를 내장하고 있다. 그리고 각 클래스가 해당 어노테이션을 통해 컴포넌트 스캔을 하고 있다면 클래스에서 생성한 객채에 @Autowired를 통해 객체 생성(주입)이 가능해진다. 그리고 자바 코드를 통한 Bean 생성 방법은 @Configura.. 더보기 [잡담]테스트의 중요성 디버깅보다 중요한것이 테스트케이스 작성이라는 말은 익히 들어 왔지만, 실무에서도, 공부를 하면서도 정작 테스트케이스를 작성해보는 경우는 거의 없었다. 이번 인프런 강의를 진행하면서 자연스럽게 테스트 케이스 작성에 대해서도 배우게 되었는데, 너무 생소해서 익숙해지는 데에 시간이 조금 더 걸릴것 같다. 단순한 입출력값 검증 같은 경우에는 금방 작성할 수 있겠지만, 현재 내가 관여하고 있는 실무에 도입하려면..? 벌써부터 눈앞이 캄캄해진다. 답은 역시 꾸준한 공부와 직접 작성해보는 코드가 아닐까 한다. 더보기 이전 1 ··· 5 6 7 8 9 10 다음