본문 바로가기

개발

Java bean이란 무엇일까? Java bean은 그냥 규약입니다. 우리가 평상시에 사용하는 클래스들이 몇 가지 약속만 지키면 그게 바로 Java bean이에요. 모든 property들은 private 접근지정자를 가져야 한다. 여기서 말하는 property란, XXX_TYPE getXXX(), void setXXX()처럼 getter / setter 메서드로 인식할 수 있는 이름을 말합니다. 더 자세한 내용은 stackoverflow 3가지의 경우 참고 (https://stackoverflow.com/questions/10773993/javabeans-whats-the-difference-between-an-attribute-and-a-property) public 접근지정자와 어떠한 인자도 받지 않는 생성자를 가져야 한다. Ser.. 더보기
[Spring] Model vs ModelAndView 어떤 상황에서 뭘 써야할까? 우선 여기서 말하는 Model 이란, import org.springframework.ui.Model; 의 Model 이다. ex) public String createForm(Model model) { model.addAttribute("memberForm", new MemberForm()); return "members/createMemberForm"; } Model과 ModelAndView 둘 다 컨트롤러에서 사용됩니다. 그러나 정말 이름처럼 Model에는 데이터만 저장되고, ModelAndView에는 데이터와 뷰가 함께 저장이 돼요. 아래에서 더 자세히 알아볼게요. Model Model은 인터페이스로, addAttribute(), mergeAttribute(), containsAttribute().. 더보기
[Spring] Spring MVC 구조에 대한 고민과 이해 스프링 MVC 1편 - 요청 매핑 핸들러 어댑터 구조 을 듣고 감명 받아서 공유합니다. 스프링을 공부해오면서 컨트롤러 클래스의 메서드 파라미터는 누가 주입해줄까❓ 리턴 값들은 어떻게 찰떡같이 반환이 잘 이뤄지는걸까❓ 그래서 HTTP 메시지 컨버터는 도대체 언제 사용될까❓ 라는 궁금증이 계속 제 머리를 멤돌았어요. 그래서 여러 곳에 질문을 남기기도 했어요. https://www.inflearn.com/questions/658706 https://github.com/Java-Chip4/StudyingRecord/issues/42 그런데 드디어 그 궁금증을 해결하게 되었어요. 모든 비밀은 애노테이션 기반의 컨트롤러(@RequestMapping)을 처리하는 핸들러 어댑터(RequestMappingHandlerA.. 더보기
Java에서의 문자열 자바에서의 문자열 자바에서 모든 문자열(string)은 String 클래스를 통해 표현된다. 그리고 String 클래스는 아래를 통해 확인할 수 있듯이, 문자열을 final한 byte 배열에 나누어 저장하기 때문에 변경될 수 없어 immutable하다고 불린다. 그러나 String 클래스의 객체를 생성해야만 문자열을 만들 수 있는 것은 아니다. "" 를 통해 문자열 리터럴(String literal)을 생성할 수 있다. 그럼 String 객체와 문자열 리터럴의 차이는 무엇일까? String 객체 new 키워드를 통해 String 객체를 생성하면, Heap 영역 내에 해당 문자열을 가진 새로운 객체가 생성된다. 이후, 똑같은 문자열을 갖고 다시 new 키워드를 통해 다른 객체를 생성하면 역시 문자열은 같지.. 더보기
유니코드와 variant form, variant selector 어느 때처럼 기능 테스트를 하고 있었다. 그런데 당연히 결과가 똑같아야 할 아래의 두 테스트의 결과가 다르게 나왔다. @Test void whiteColorTest() { String shipName1 = "Whiteship"; Ship whiteship = ShipFactory.orderShip(shipName1, "keesun@mail.com"); assertThat(whiteship.getColor()).isEqualTo("white"); } @Test void blackshipColorTest() { String shipName2 = "Blackship"; Ship blackship = ShipFactory.orderShip(shipName2, "keesun@mail.com"); assertTha.. 더보기
[Java] 인터페이스만 다중 상속이 가능한 이유? 추가사항 ( Q.질문 그렇다면 여러 인터페이스들로부터 상속받은 하나의 클래스가 같은 이름의 메서드들을 오버라이딩할 때 클래스는 어떤 인터페이스로부터 상속받은 메서드인지 어떻게 알 수 있을까? JVM이 알아서 판단하니 개발자가 알 필요가 없는 것일까?) JVM도, 개발자도 어떤 인터페이스의 메서드를 구현한 것인지 알 필요가 없습니다. 그래서 구분할 수도 없습니다. 인터페이스는 행동만을 표현하고, 구현체를 제공하지 않기 때문입니다. 해당 행동을 구현한 클래스의 메서드 구현체에 집중이 되어야 하는 것이지, 그 행동이 어디로부터 왔는지는 중요하지 않습니다. 그 덕분에 두 인터페이스를 구현한 클래스에서는 해당 메서드에 대해 다이아몬드 문제가 발생하지 않게 되는 것이죠. 그렇다면 이런 질문이 생길 수 있습니다. 만.. 더보기