문제 발견 "전부 public이면 편하지 않나?"Java를 처음 배울 때 접근 제어자는 꽤나 귀찮은 존재입니다."아니 그냥 전부 public으로 해도 컴파일되고 동작도 하지 않나?// 모든 필드가 public인 상품 엔티티public class Product { public Long id; public String name; public int price; public int stock; public Product() {} // 누구나 빈 객체를 만들 수 있습니다}이 코드의 문제는 아무 곳에서나 아무 값을 넣을 수 있다는 것입니다.Product product = new Product();product.stock = -100; // 재고가 마이너스?product.price ..
전체 글
스파게티 코드에서 DDD까지, 레이어드 아키텍처와 DIP로 완성하는 설계당신의 코드는 비즈니스를 담고 있습니까?"이 기능 하나만 고치면 되는데..."라는 생각으로 코드를 열었지만, 눈앞에 펼쳐진 거대한 코드 뭉치에 숨이 턱 막혔던 경험. UI, 비즈니스 규칙, 데이터베이스 코드가 뒤엉켜, 작은 수정 하나가 예상치 못한 연쇄 버그를 일으키는 악몽. 개발자라면 누구나 겪어봤을 '스파게티 코드'의 비극입니다. 이런 코드는 '결합도(Coupling)'가 높다고 표현하고, 작은 수정 하나가 예상치 못한 연쇄 버그를 일으키곤 합니다.. 하지만 진짜 문제는 코드의 복잡성 너머에 있습니다. "과연 이 코드가 우리 비즈니스의 핵심을 제대로 표현하고 있는가?"라는 질문에 자신 있게 답할 수 없다면, 우리는 기술 부채뿐만 ..
클라이언트 IP 가져오기 서버로의 요청이 프록시나 로드 밸런서를 거칠 때 클라이언트의 실제 IP 주소를 정확하게 가져오는 방법에 대해 알아보겠습니다. 기본적인 방법과 프록시 서버, 로드 밸런서 등의 환경에서 사용할 수 있는 방법을 설명하겠습니다. 기본 방법 : request.getRemoteAddr() 가장 기본적인 방법으로 HttpServletRequest 객체의 getRemoteAddr() 메서드를 사용하면 클라이언트의 IP 주소를 가져올 수 있습니다. import javax.servlet.http.HttpServletRequest;private String getClientIpAddress(HttpServletRequest request) { request.getRemoteAddr();} 이..
✈️다음 글은 코딩 테스트 스터디를 준비하기 위해 책을 정리한 글입니다.코딩 테스트란?코딩 테스트는 지원자가 알고 있는 자료구조와 알고리즘 등을 이용해서 문제를 해결할 수 있는 능력을 평가하는 시험입니다. 한국의 중상위 IT 기업은 거의 모두 코딩 테스트를 진행하며, 이 테스트를 통과한 지원자만 다음 면접 과정을 진행할 수 있습니다.일반적인 채용 프로세스코딩 테스트에서는 제한 시간 내 기업에서 출제한 문제를 해결하는 코드를 작성해야 합니다. 출제되는 문제 개수와 난이도는 기업별로 상이하며, 일반적으로는 4~5문제를 3시간 정도 내 해결해야 하며, 난이도는 프로그래머스 기준으로 2~4 레벨 정도입니다. 제한 시간 내 푼 문제 개수와 시간을 바탕으로 기업은 다음 단계로 넘어갈 지원자를 선택합니다. 따라서 평..
함수(Function)와 메서드(Method) 두 단어의 차이에 대해 정리한 글입니다.우선, 함수와 메서드는 프로그래밍에서 기능 단위의 코드 블록입니다. 그러나, 일반적으로 함수와 메서드는 객체지향 프로그래밍과 절차지향 프로그래밍에 따라 약간의 차이가 있습니다.함수(Function)란?함수는 하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 코드의 집합입니다.함수는 절차지향 프로그래밍에서 사용되며, 데이터를 입력받아 처리하고 결과를 반환합니다. 함수는 프로그램의 구조화와 코드 재사용을 위해 사용되기 때문에 여러 곳에서 호출되어 사용이 가능합니다.하나의 기능이 하나의 함수로 구현되어 있기 때문에 디버깅 작업이 편리해집니다.메서드(Method)란?메서드는 객체지향 프로그래밍에서 사용되며, 메서드는..
가장 기본인 참조형 객체 String에 대해 알아보려고 합니다. String 객체를 생성하는 데 방법은 두 가지가 있습니다. 첫 번째로 리터럴 방식("")으로 생성하는 것과 두 번째로 new 키워드로 생성하는 방법이 있습니다. 우선, 간단하게 String 객체를 저장하는 메모리 영역을 그림으로 보여드리겠습니다. 위 그림은 Java의 힙 메모리 영역입니다. 여기서 new 키워드로 String 객체를 생성하게 되면 Heap 영역에 메모리가 생성되고, 리터럴 방식으로 사용하게 된다면 Heap 영역의 내부에 있는 String constant pool 영역에 생성됩니다. String은 불변성을 지니고 있어 한번 저장된 값은 변하지 않습니다. 그러면 자바는 내부적으로 String 객체를 업데이트할 때 기존에 있는 ..
Error Message error : illegal start of type 번역 : 잘못된 유형 시작 Cause class Solution { public String solution(String[] seoul) { int i = 0; for (String s : seoul) { if (s.equals("Kim")) { break; } i++; } } return "김서방은 " + i + "에 있다"; } Illegal start of type 오류는 일반적으로 Java에서 발생하는 컴파일 타임 에러입니다. 다음과 같은 상황에서 발생합니다. 잘못된 선언 : 변수 또는 메서드의 선언이 잘못되었을 때 발생합니다. 스코프 문제 : 클래스, 메서드, 블록 내의 선언이 올바르게 이루어지지 않았을 때 발생합니다..
자 기다리고 기다려주신 2편이 따끈따끈하게 준비해 봤습니다..! 만약 재밌었다면.. 1편도 읽어주세요.. 몇 분 안 계셨지만 나름 반응이 뜨거웠다는.. (부끄럽지만 ㅠ.ㅠ) 2023.11.26 - [Tutoring] - [튜터링] 객체지향과 TDD 기법 E.01 (자기소개 및 객체지향 라이브 코딩) [튜터링] 객체지향과 TDD 기법 E.01 (자기소개 및 객체지향 라이브 코딩) 최근 객체지향의 사실과 오해라는 책을 읽기 시작하면서 인프런 커뮤니티를 구경하던 도중에 TDD와 객체지향 무료 튜터링 글이 올라온 것을 봐버렸다. 마감!!! https://www.inflearn.com/studies/1074683/tdd%E gyunny.tistory.com 간단하게 요약하자면, 멘토님과 멘티들의 간단한 객체지향 ..
민망하지만... 가끔씩 스스로의 반성을 갖는 시간이 나에게 발전을 할 수 있는 촉진제가 될 수 있겠다고 생각해서 작성해보려고 합니다. 저는 원래 토목 쪽 중소기업에서 무난 무난하게 일을 하며 평범한 일상을 지내던 직장인이었습니다. 뭐 말이 무난무난이지 솔직히 말하면 일을 꽤나 잘했다. 나름 팀 내에서 핵심 인물 중 하나였고 회장님과 1대 1로 회의도 진행했던 사람이었습니다. ( 뭐 솔직히 저 하나 없다고 회사가 망하거나 그러지는 않겠지만.. 암튼 열심히 살던 사람이라고 말씀드리고 싶네요...) 업계 특성상인지는 모르겠지만.. 회사에서 지내며 저의 스스로의 성장 가능성? 발전 가능성을 크게 느끼지 못했습니다. 더 크게 성장을 해서 인정받고 더 높은 자리로? 올라가고 싶은 나름의 야망가였던 것 같습니다. 이..
최근 객체지향의 사실과 오해라는 책을 읽기 시작하면서 인프런 커뮤니티를 구경하던 도중에 TDD와 객체지향 무료 튜터링 글이 올라온 것을 봐버렸다. 마감!!! https://www.inflearn.com/studies/1074683/tdd%EC%99%80-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%EB%AC%B4%EB%A3%8C-%ED%8A%9C%ED%84%B0%EB%A7%81 TDD와 객체지향 무료 튜터링 - 인프런 | 스터디 마감 됐습니다. 안녕하세요! 지난 모임에 이어 2기 모집 합니다! '골프 퍼팅 연습을 하는데, 공이 어디로 가는지 전혀 보지 않고 1,000개의 공을 친다고 생각해 보죠. 이건 도대체 뭘 연습하고 있 www.inflearn.com 마침 개발을 하면서 객체지..