본문 바로가기

전체 글56

[JAVA] 불변 클래스 0. 이 글을 쓰게 된 이유 개발을 할 때 수도 없이 클래스는 웬만하면 불변 클래스로 만들라는 소리를 들었다. 나름의 이유들을 들었는데 명확하게 공감되지 않았다. 도대체 왜 불변 클래스로 만들어야하는가에 대한 명확한 이유를 알기위해 이 글을 쓰게 되었다. 1. 불변 클래스란? 이펙티브 자바에서 불변 클래스란 그 인스턴스 내부 값을 수정할 수 없는 클래스라고 만한다. 즉, 해당 인스턴스가 가지고있는 정보들을 수정할 수 없도록 만들어 변하지 않게 하는 클래스이다. 2. 왜 불변 클래스를 사용해야할까? 불변 클래스는 가변 클래스보다 설계하고 구현하고 사용하기 쉽고, 오류가 생길 여지도 적고 훨씬 안전하다고 한다. 왜 그럴까? 2.1 불변 클래스는 그 자체로 실패 원자성을 제공한다. 실패 원자성이란 메서드에서 .. 2023. 3. 24.
[Java] 객체 지향 vs 성능 0. 이 글을 쓰는 이유 페어 프로그래밍을 하던 중 페어와 성능에 대한 의견이 충돌한 적이 있었다. 객체 지향적으로 코드를 짜다보면 성능이 완벽하지 않은 코드가 생기는 경우가 많다. 예를 들어, for문 하나에서 A, B 둘 다 처리할 수 있는데 역할에 따라 객체를 분리하다보면 각각 for문을 도는 경우가 생긴다. 이럴 경우 어떤 것을 선택하는 것이 맞을까? 1. 객체 지향의 목적 우리는 자바를 비롯한 객체 지향 언어들을 왜 사용할까? 단순히 기능을 구현하기 위해서라면 사실 어떤 언어든 상관없다. 하지만 우리가 객체 지향 언어를 사용하는 이유 중 가장 큰 이유는 유지보수 하기 쉬운 코드를 짜기 위함이다. 유지 보수하기 좋은 코드(객체 지향적인 코드)는 누구든 이해할 수 있게 책임과 역할이 잘 분리되어있음.. 2023. 3. 9.
[JAVA] 객체 안의 public api 선정 기준 0. 이 글을 쓰게된 이유 우테코에서 사다리 미션을 하며 객체의 생성자에 있는 private method를 public api로 열어서 활용하는 것이 어떠냐는 피드백을 받았다. 개인적으로는 그 객체가 그 메소드가 호출되지 않는다면 의미가 없는 객체라고 생각해서 반박(?)을 했는데 다시 리뷰어가 public method로 열어둠으로써 얻는 이점과 private을 했을 때의 단점에 대해 설명 해주셨고 완벽하게 설득 당했다. 그 내용을 공유해보면 다음과 같다. 비즈니스 로직을 파악하기 쉽다. 보통 api 사용자들은 private mathod로 정의 해놓으면 필요하지 않는 이상(오류가 나지 않는 이상) 그 메소드를 잘 읽지 않는다. 하지만 public method는 그 메소드를 사용하려면 (적어도 메소드 명이라.. 2023. 2. 28.
[후기] 우테코 2주차 회고 0. 이 글을 쓰게 된 이유 우아한 테크코스가 시작한지 2주가 되었다. 이쯤에서 다시 한번 돌아보는 회고를 가져보고자 이 글을 쓰게 되었다. 1. 우테코 생활 예상은 어느정도 했지만 우테코에서의 생활은 굉장히 자유롭다. 출석 체크도 크루끼리 알아서 하고 점심도 배고플 때 알아서 먹고오면 된다. 미션도 마감 기한 정도만 정해져 있고 나머지는 자기의 페이스에 맞춰서 하면된다. 그리고 무엇보다 가장 크게 느꼈던건 인싸들만 살아남을 수 있는 곳인것 같다. 개인적으로는 굉장히 재밌고 여러가지 스킬들을 배울 수 있는 것 같아 만족스럽다! 2. 답해보기 교육 및 피드백 시간에서 생각해볼만한 질문들이 있어 정리해보려고 한다. 2.1 TDD, 리펙토링 2.1.1 내가 TDD, 리팩토링을 하는 이유는 무엇인가? 솔직하게 .. 2023. 2. 27.
[Database] MySQL 잠금(Lock) InnoDB 스토리지 엔진 잠금 편 0. 이 글을 쓰게 된 이유 MySQL 엔진 레벨 잠금 편에이어서 InnoDB 스토리지 엔진 잠금 편을 쓰게 되었다. InnoDB 스토리지 엔진은 MySQL에서 기본 스토리지 엔진이며 엄청나게 특수한 경우가 아니면 MyISAM이나 MEMORY 엔진을 사용할 이유가 없다. 그래서 InnoDB 스토리지 엔진만이 레코드 기반 잠금을 제공하기 때문에 스토리지 엔진에서 InnoDB 스토리지 엔진만을 다루게 되었다. 1. InnoDB 스토리지 엔진 잠금 1.1 InnoDB 스토리지 엔진 잠금의 장점 InnoDB 스토리지 엔진은 MySQL에서 제공하는 잠금과는 별개로 스토리지 엔진 내부에서 레코드 기반 잠금 방식을 탑재하고 있다. 이러한 이유로 다음과 같은 장점이 존재한다. InnoDB 스토리지 엔진은 레코드 기반 .. 2023. 1. 12.
[Database] MySQL 잠금(Lock) MySQL 엔진 레벨 잠금 편 0. 이 글을 쓰게 된 이유 MySQL 잠금에 대해서 공부하던 중 새롭게 안 지식과 전체적인 내용을 정리하기 위해 이 글을 쓰게 되었다. 1. MySQL 엔진의 잠금 MySQL에서 사용되는 잠금은 크게 MySQL 엔진 레벨과 스토리지 엔진 레벨로 나눌 수 있다(MySQL 엔진은 MySQL 서버에서 스토리지 엔진을 제외한 나머지 부분으로 이해하면 됨). MySQL 엔진 레벨의 잠금은 모든 스토리지 엔진에 영향을 미치지만, 스토리지 엔진 레벨의 잠근은 스토리지 엔진 간 상호 영향을 미치지 않는다. MySQL 엔진 레벨 잠금은 크게 글로벌 락, 테이블 락, 네임드 락, 메타데이터 락이 있다. 그리고 스토리지 엔진 레벨의 락은 사실 상 INNODB 엔진의 락이라고 봐야한다. 왜냐하면 MyISAM과 MEMORY .. 2023. 1. 12.