개발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..더보기
일상NAVER Cloud SUMMIT 2022 사전등록!대학교 1, 2학년 당시 Google I/O 행사나 Google Campus, MARU180 등 여러 곳에서 개최하는 행사에 다녔던 적이 있다. 많은 분들을 만날 수 있었고, 좋은 지식도 전달 받았다. (특히나 좋았던 경험은 Google Korea에 재직 중인 분을 만나서, 사옥 방문도 하고, 사내 식당에서 식사도 했던 경험이었다.) 그 이후부터는 조금 더 살아있는 지식을 듣기 위해서, 네트워킹 겸 여러 개발자 컨퍼런스를 다니는 걸 좋아하게 되었다. 쓸데없는 이야기는 여기서 끊고! 2022/12/14에 온라인으로 네이버 클라우드 써밋이 열린다. 키노트 목록을 보니, 다 좋았다. 모든 Session이 기대가 된다.. 얼핏 보면 개발과 별 상관없는 내용들로만 채워져 있는 것 같지만, 개발 문화와 새로운 가치..더보기
개발[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 키워드를 통해 다른 객체를 생성하면 역시 문자열은 같지..더보기
우테코 프리코스10/26 (수) 우테코 프리코스 시작가장 우선시로 생각한 것은 기능 요구 사항을 모두 지킨 코드를 작성하는 것이다. 현업에서는 아무리 구조적으로, 객체지향적으로 잘 짜여진 코드보다, 일단 잘 돌아가는 코드가 더 가치있는 코드라고 생각하기 때문이다. 나의 목표는 소프트웨어 장인이지만, 예쁜 쓰레기보다는 동작하는 제품을 먼저 만들고 싶다. 사실 리팩토링도 그렇게 일어나는 것이라고 배웠다. 무엇이 됐든, 일단 동작하는 코드를 만들고 수정하는 것. 이 사이클이 바로 TDD이다!더보기
개발유니코드와 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도, 개발자도 어떤 인터페이스의 메서드를 구현한 것인지 알 필요가 없습니다. 그래서 구분할 수도 없습니다. 인터페이스는 행동만을 표현하고, 구현체를 제공하지 않기 때문입니다. 해당 행동을 구현한 클래스의 메서드 구현체에 집중이 되어야 하는 것이지, 그 행동이 어디로부터 왔는지는 중요하지 않습니다. 그 덕분에 두 인터페이스를 구현한 클래스에서는 해당 메서드에 대해 다이아몬드 문제가 발생하지 않게 되는 것이죠. 그렇다면 이런 질문이 생길 수 있습니다. 만..더보기