TIL_WIL

TIL_230221

성-민 2023. 2. 22. 02:02

오늘은 자바스터디를 하고 다양한 코드를 보면서 어떻게 코드를 분류해두는지에 대해 알아봤다.

 

 객체지향이라는 개념이 있는 만큼 코드 분류에도 현업에서 규칙처럼 사용하는 것이 있을거라 생각해서 일치하는 부분이 있을 거라고 생각했지만 너무 다양한 코드를 봤고 관점에 따라 모두 다르게 구성하는 것을 봤다.

 이런 궁금증을 해결하기 위해 매니저님께 여쭤봤는데 관심사의 분리 SoC라는 개념이 존재했다.

이  또한 결국 SOLID원칙과 비슷하게 느껴졌는데 각 상황별 최소 단위가 다 다르게 볼 수 밖에 없기에 최종적으로 목표에 달하는 모습을 염두해두며 최소 단위로 쪼개는게 필요하다고 생각했다.

 그러므로 모두 정리하는 방법이 다르며, 다양하게 나타난 것 같다. 이러한 부분은 내가 최종적으로 창업하고자하는 목표에 맞춰서 기준을 잡고 연습해나가는 것이 현재로서는 최선의 방법일 것 같다.

 

관심사 분리의 법칙 SoC

SoC는 시스템 요소가 단일 목적이고 베타성을 가져야한다는 것이다.

어떤 요소도 다른 요소와 책임을 공유하면 안 되고, 그 요소와 관계가 없는 책임을 포함시킬 수 없다는 것이다.

 

 

오늘 자바스터디를 하며 한 번 더 짚어봐야할 내용들이다.

 

 

박싱 & 언박싱

자바 컴파일러가 편의성을 위해 박싱과 언박싱을 제공한다. 내부적으로 추가 연산작업을 거치기 때문에 100만건 기준으로 성능 차이가 약 5배 이상 나기때문에 불필요한 오토 캐스팅이 일어나지 않도록 주의해야 한다.

 

String

String은 불변성을 가지는 특징이 있어 변하지 않는 문자열을 자주 읽어들일 경우 String을 사용하면 성능이 좋다.

하지만 문자열 추가, 수정, 삭제 등의 연산이 빈번하게 발생하는 알고리즘에는 String을 사용하게 되면 힙 메모리에 임시 가비지가 생성되어 힙메모리 부족으로 어플리케이션 성능 저하를 시킬 수 있다.

이를 방지하기 위한 것이

StringBuffer StringBuilder다.

.append() .delete() 등의 API를 이용해 동일 객채네에서 문자열을 변경한다. 가비지가 생성되지 않는다.

 

StringBuffer StringBuilder의 차이점

동기화의 유무

StringBuffer는 동기화 키워드를 지원해 멀티쓰레드 환경에서 안전하다.

StringBuilder 동기화를 지원하지 않아서 멀티쓰레드에 적합하지 않지만 단일쓰레드에서는 StringBuffer보다 뛰어나다.

쓰레드 공부를 다시 시작하게 되면 이 내용을 다시 확인해봐야겠다.