전체 글 176

[Effective Java] Chapter 5

Chapter 5 제네릭 제네릭을 지원하기 전에는 컬렉션에서 객체를 꺼낼 때마다 형변환을 했다. 그래서 누군가 실수로 엉뚠한 타입의 객체를 넣어두면 런타임에 형변환 오류가 나곤 했다. 반면, 제네릭을 사용하면 컬렉션이 담을 수 있는 타입을 컴파일러에게 알려주게 된다. 그래서 컴파일러는 알아서 형변환 코드를 추가할 수 있게 되고, 엉뚱한 타입의 객체를 넣으려는 시도를 컴파일 과정에서 차단햐여 더 안전하고 명확한 프로그램을 만들어 준다.Item 26 로 타입은 사용하지 말라제네릭 클래스, 제네릭 인터페이스: 클래스와 인터페이스 선언에 쓰이는 타입 매개변수제네릭 타입: 제네릭 클래스와 제네릭 인터페이스를 통틀어 칭한다 각각의 제네릭 타입은 일련의 매개변수화 타입을 정의한다. 먼저 클래스 이름이 나오고, 이어서..

[Effective Java] Chapter 4

Chapter 4 클래스와 인터페이스 클래스와 인터페이스는 자바 언어의 심장과도 같다. 그러니까 열심히 하자.item15 클래스와 멤버의 접근 권한을 최소화하라 어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 바로 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트롤부터 얼마나 잘 숨겼느냐다. 정보 은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리다.  정보 은닉의 장점은 다음과 같다.시스템의 개발 속도를 높인다.시스템 관리 비용을 낮춘다.정보 은닉 자체가 성능을 높여주지는 않지만, 성능 최적화에 도움을 준다.완성된 시스템을 프로파일링해 최적화할 컴포넌트를 정한 다음 다른 컴포넌트에 영향을 주지 않고 해당 컴포넌트만 최적화할 수 있기 때문이다.소프트웨어의 재사용..

[Effective Java] Chapter 3

Chapter 3 모든 객체의 공통 메서드 Object에서 final이 아닌 메서드는 모두 재정의를 염두에 두고 설계된 것이라 재정의 시 지켜야하는 일반 규약이 명확히 정의되어있다. 메서드를 잘못 구현하면 대상 클래스가 이 규약을 준수한다고 가정하는 클래스를 오동작하게 만들 수 있다.Item 10 equals는 일반 규약을 지켜 재정의하라 아래의 상황에서는 재정의를 최대한 피하도록하자!각 인스턴스가 본질적으로 고유하다.값을 표현하는 게 아니라 동적하는 개체를 표현하는 클래스가 여기 해당한다.인스턴스의 '논리적 동치성(logical equality)'을 검사할 일이 없다.논리적 동치성을 원하지 않다면 재정의하지 않아도 된다.상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다.대부분의 Se..

[Effective Java] Chapter 2

Chapter 2Item 1 생성자 대신 정적 팩터리 메서드를 고려하라정적 팩터리 메서드가 생성자 보다 좋은 장점 다섯가지.- 이름을 가질 수 있다.  정적 팩터리는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. // 생성자BigInteger(int, int, Random)//정적 팩터리 메서드BigInteger.probablePrime  - 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 이는 인스터스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불피요한 객체 생성을 피할 수 있다. 대표적인 예인 Boolean.valueOf(boolean) 메서드는 객체를 아예 생성하지 않는다. (?)  반복되는 요청에 같은 객체를 반환하는 식으로 정적 팩터리 방식의 ..

[Javascript] TDZ와 Hosting에 대해서 알아보자

1. 개요 회사에서 개발 중 이해하지 못하는 버그가 발생되었다. C++과 Java만 쓰던 나에게는 아직 JS의 문법이 어려운 것 같다. 오늘은 내가 마주친 버그와 이 버그를 이해(?)하기 위해 공부한 내용을 적어보고자한다.2. 본론2.1 C++에 익숙한 내가 마주친 버그 아래의 C++ 코드를 보자. #include using namespace std;int main() { int tmp = 0; cout   tmp라는 변수가 if문의 블럭 밖에서 선언되고 또 그 안에서 한번 더 선언됐다. C++은 이런경우 더 가까운 변수를 참조하는 것으로 되어있다. 따라서 if문 안에 있는 if문은 if문 밖에서 정의된 tmp변수를 참조한다.  그럼 이것과 비슷하게 작성된 JS 코드를 보자. let tmp =..

[산업기능요원] 12월 기념 회고록 #4 🖋️

1.개요 이제 12월이 되었다. 대학교를 입할 때는 25살이 되면, 뭔가 많은 것을 알고 한 분야를 관철하는 사람일줄 알았는데 지금은 아무것도 모르고 미래를 걱정하는 20살이랑 별 다를 바가 없는 것 같다. 행복하게 직장을 다니고 있지만 항상 불안한 마음을 가지고 있다. 왜그런지는 모르겠다. 이유야 시간이 지나면서 알아갈 것이라고 생각한다. 그때까지는 그냥 내 자리에서 최선을 다하면 된다고 생각한다. 우리 아버지가 대학교 입학할 때 말씀하셨던 것처럼 "타인보다 발전하는 삶이 아닌 과거의 나보다 발전하는 삶을" 살아가고 싶다.2.본론2.1 개발자의 커뮤니케이션  업무의 방식이 조금 달라졌다. 실무를 경험하기 전에는 "그냥 개발자는 기획의도대로 적합한 기술 스택을 찾아서 만들면 되는거 아닌가?" 라는 생각이..

[FLOWBIT] Groq API의 적용기 #2 (Llama3의 프롬프트 엔지니어링) 🗣️

1. 개요 FLOWBIT 서비스에 LLM이 필요하다는 결론을 내리고 Groq라는 구세주를 만났다. 사용 모델을 llama3으로 확정한 후 테스트를 위해 모델에 여러 질문을 해보다가 프롬프트 엔지니어링을 알게되었고, 이를 적용해보았다. 이번 글에서는 그 과정을 적어보고자한다.2. 본론2.1 프롬프트 엔지니어링프롬프트 엔지니어링이란 무엇인가... 찾아보니 좋은 문서가 있어 공유해본다.  아래의 글을 요약하자면, 세부적인 결과를 얻을 수록 자세한 지침이 필요하고 이를 여러 방법(문자, 기호, 형식)으로 정규화 한것을 프롬프트 엔지니어링으로 생각하면 된다. https://aws.amazon.com/ko/what-is/prompt-engineering/ 프롬프트 엔지니어링이란? - AI 프롬프트 엔지니어링 설명 ..

기록지/FLOWBIT 2024.12.15

[FLOWBIT] Groq API의 적용기 #1 (LLM을 무료로 사용하는 방법) 🤖

1. 개요OpenAI를 무료로 사용하기 힘들었다. 무료로 사용할 수 있는 token수가 생각보다 적었다. 이 이슈를 정말 해결하고 싶었다. 사실 해결 방법은 간단하다. 돈을 쓰면 된다. 그러나 "조금 더 좋은 방법이 있지 않을까?" 라는 생각을 하게 되었고 Groq API를 알게 되었다.  input token의 제한으로 FLOWBIT VER2에서는 Chat GPT의 그래프 분석 기능이 포함되지 않았지만 다시 우리 서비스의 LLM을 사용한 그래프 분석 기능을 넣고 싶었고, 기획자분도 해당 기능의 필요성을 말해주셨다. 다음은 기획자분이 전달해주신 기획자료 중 일부이다. AI에이전트는 복잡한 정보를 한 번에 정리해주는 아주 중요한 기능을 한다. 내가 사용자였어도 비트코인 투자를 처음 시작한다면 복잡한 지표보..

기록지/FLOWBIT 2024.12.11

[중소벤처기업부 2030 청년 자문단] 위촉식 후기 #1 💎

1. 개요  중소벤처기업부의 2030 청년 자문단으로 위촉되었다. 아는 멘토님께서 추천해주셨고 사실 전부터 관심이 많았다. 100세 시대라지만 정년이 50이라면 결국 사람은 자신의 일을 약 30년동안은 해야한다는 것이다. 사업에 대한 생각, 투자에 대한 생각은 나의 끊임 없는 고민거리였다.  그런 이유에서인지 여러 창업대회와 공모전에 참여하였고 다양한 수상경력이 도움이 되었는지 최종적으로 자문단원으로 위촉되었다. 이제 그 과정을 적어보자 한다. 2. 본문- 서류  자소서를 잘 쓴다고는 할 수 없지만 1학년 때 부터 해외봉사활동, 공모전, 계약직, 인턴고 같은 활동에 참여하기 위해 여러 자소서를 작성하였다. 그럼에도 불구하고 이번 자소서는 정말 어려웠다. 분량을 맞추려다 보니 내가 살아온 인생을 하나의 타..

[FLOWBIT] VER2 릴리즈 회고록 📝

1. 개요  FLOWBIT VER2가 릴리즈 되었다. "이젠 정말 버그가 없겠지?" 라는 생각으로 테스트를 한 기간이 3개월이 넘어갔다. 각자 자신의 커리어를 위해 관철하는 과정에서 일부의 시간을 하나의 프로젝트에 사용한다는 것은 쉬운일이 아니다. 그런 분들이 6명이나 있으니 이런 팀에서 팀장으로 있는 것 자체가 나에게는 큰 도움이 된 것 같다.  프로젝트가 끝날 때까지 긴 시간이 걸렸지만 포기하지 않고 성공적으로 VER2를 릴리즈 했다는 사실에 일단 만족하고 있다. 그러나 진정한 목적을 달성하기 위해 다시 시작하는 마음으로 회고록을 작성하고자한다.https://www.flowbit.co.kr/ 플로우빗 www.flowbit.co.kr2. 본론 - 사이드 프로젝트를 하는 이유  처음에는 그저 좋은 회사에..

기록지/FLOWBIT 2024.11.20