본문 바로가기

Programing/자바

(86)
[Java] 배열 in 자바 자바에서는 배열이 객체이다. 이것은 자바 언어 명세에 적혀있다. JLS 4.3.1 An object is a class instance or an array. 오브젝트는 클래스의 인스턴스이거나 배열이다. C/C++ 의 배열 즉 C/C++의 배열과 달리 자바의 배열은 객체라는 큰 차이가 생긴다. C언어에서는 sizeof 라는 명령으로 자료구조의 크기를 구할 수 있다. #include int main(int argc, const char * argv[]) { int num = 1; int arr[2] = { 1, 2 }; printf("%lu\n", sizeof(num)); printf("%lu\n", sizeof(arr)); return 0; } C언어의 데이터 타입의 크기는 플랫폼(시스템)에 따라 다를 ..
[책] 프로그래머의 장점과 단점 프로그래머의 장점은 A라고 말하면 A를 해준다. 프로그래머의 단점은 A라고 말하면 A만 해준다. 최근에는 이런 이야기도 있었다. [개발자의 머리구조] 어느 아내가 프로그래머 남편에게 「쇼핑하러 갈 때, 우유 하나 사와. 아, 계란 있으면 6개 사와」 남편은 잠시 후, 우유를 6개 사왔다. 아내는 물었다. 「왜 우유를 6개나 사왔어!」 남편「계란이 있길래 6개 사왔지…」
[Java] Effective Java의 Dogma 어제 코드리뷰를 받다가 아래와 같은 댓글을 보았다. from보다는 of가 더 적절할 것 같네요. from: 매개변수를 하나 받아서 해당 타입의 인스턴스를 반환하는 형변환 메서드 of: 여러 매개변수를 받아 적합한 타입의 인스턴스를 반환하는 집계 메서드 이펙티브 자바의 첫 아이템 '생성자 대신 정적 팩토리 메서드를 고려해보자'가 적용된 부분에 대한 리뷰이다. 리뷰하신 분은 책의 내용을 comment에 같이 적어두었다. 이펙티브 자바에 나오는 것 같아서 찾아보니 아래와 같이 맞았다. 한글판은 12~13쪽이다. 평소에 Junior 개발자들이 이펙티브 자바를 스터디를 할 때 참관하면서 교조주의(敎條主義)에 빠지는 것을 자주 경계했었다. 교조주의란 무언가에 대한 굳은 믿음과 그러한 가치관을 뜻하는 의미로 도그마(..
[Java] count++, count+=1, count = count + 1 차이는 아래와 같은 반복문이 있었는데 public class ForSumFrom1To100Example { public static void main(String[] args) { int sum = 0; for (int i = 1; i
[Java] Comparable vs Comparator 비교 Q. 질문 compareble은 정해진 기준으로 정렬할 때 사용하고 comparetor는 사용자가 원하는 기준을 커스텀해서 사용할 때 사용한다고 배웠는데 compareble도 리턴값만 수정하면 사용자가 원하는대로 기준값을 설정 할 수 있는 것 아닌가요? 이 둘의 차이점과 사용 용도의 차이를 잘 모르겟습니다. 인터페이스의 정의 다른 것을 찾아보기전에 각 인터페이스의 정의를 보고 넘어가자. Comparable 인터페이스 (docs) package java.lang; public interface Comparable { public int compareTo(T o); } Comparator 인터페이스 (docs) package java.util; @FunctionalInterface public interfa..
[Java] 참조(Reference)와 주소의 관계 자바 카페에서 2020-07-24 에 논쟁을 했던 내용이다. 어떤 자바를 공부하는 사람이 아래와 같은 질문을 했다. 질문 내용: equals(), == 질문드립니다. - 질문 내용 : 안녕하세요. 자바에서 equals(), ==는 주소값이 같은지 확인하는거라 들었는데요. class Person { String name; public Person(String name) { this.name = name; } @Override public boolean equals(Object obj) { if(!(obj instanceof Person)){ return false; }else{ return this.name == ((Person)obj).name; } } } 위 예제 처럼 equals를 오버라이딩 했습니다..
[JPA] 엔티티의 연관관계 시행착오 회사에서 JPA를 사용하고 있었지만 테이블이 비정규화되어 있어서 테이블간에 join이 불필요했다. 엔티티 역시 연관관계를 가지지 않았기에 단순하게 CRUD 정도만 하면 되서 복잡도는 낮았다. N+1 문제가 발생할 일이 없다. 대신 불필요한 데이터를 중복적으로 저장을 하기 위한 오버헤드가 존재했다. 이번에 현금영수증 관련 개발을 하면서 약간의 정규화를 해서 테이블의 연관관계를 갖도록 설계를 진행했다. 그런데 데이터를 저장하면서 부터 난관에 봉착했다. 예를 들면 아래와 같은 특정 필드가 값을 기본값을 가지지 않는다는 등의 알 수 없는 메시지를 만났다. Caused by: java.sql.SQLException: (conn=2575762) Field 'CASH_RECEIPT_REQUEST_ID' doesn't..
[Java] Scope shadowing과 DCL51-J 가끔 sonarqube 돌려보면 DCL51-J 에 대한 코드 냄새가 잡힌다. 예를 들면 아래와 같다. 5번째 라인에서 지역변수 value를 사용하면 멤버변수인 value와 이름이 동일한데 사용했다고 경고를 한다. public class Foo { private String valueType; public void foo(SomeParameter someParameter) { ValueType valueType = someParameter.getValueType(); if (valueType != null) { this.valueType = valueType.name(); } } } 이럴 경우 어떠한 방법이 좋을까? 방법1. 지역 이름을 바꾼다. - 쉬우면서 명시적인 방법이다. public class Fo..