이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. math 클래스의 random() 메소드 이용 0.0과 1.0 사이(0.0 포함, 1.0 미포함) 범위에 속하는 하나의 double 타입의 값을 리턴 double v11 = Math.random(); //0.47464615326686044 1부터 n까지 랜덤 수를 뽑는 코드는 아래와 같다. int num = (int) (Math.random()*n) + 1; 아래의 예제는 1~45의 랜덤 숫자 중 6개 뽑는 예제이다. public class Main { public static void main(String[] args) { for(int i = 0; i < 6; ++i) { int ..
이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. String은 내부 문자열을 수정할 수 없다. 아래의 코드를 보면 다른 문자열을 결합해서 내부 문자열을 변경하는 것처럼 보이지만 사실 'ABCDEF'라는 새로운 String 객체를 생성하는 것이다. 그리고 data 변수는 새로 생성된 String 객체를 참조하게 된다. String data = "ABC"; data += "DEF"; 문자열의 + 연산은 새로운 String 객체가 생성되고 이전 객체는 계속 버려지는 것이기에 효율이 좋지 못하다. 잦은 문자열 변경 작업을 해야 한다면 String 보다는 StringBuilder를 사용하는 것이 좋다. StringBuilder 클래스 Str..
이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 레코드(record) 데이터 전달을 위한 DTO(Data Transfer Object)를 작성할 때 반복적으로 사용되는 코드를 줄이기 위함 Java 14부터 레코드가 도입되었다. 필드는 읽기만 가능하도록 private final로 선언됨 필드가 읽기만 가능하므로 setter가 없고, getter 이름이 단순히 필드 이름이다. 동등 비교를 위해 hashCode()와 equals() 메소드가 재정의 되어있다. toString()메소드가 재정의 된다. public record Member(String id, String name, int age) { } 이렇게 단순하게 클래스명 앞에 rec..
이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 자바 표준 모듈에서 제공하는 라이브러리는 방대하기 때문에 쉽게 찾아서 사용할 수 있도록 도와주는 API(Application Programming Interface) 문서가 있다. 라이브러리가 클래스와 인터페이스의 집합이라면, API 도큐먼트는 이를 사용하기 위한 방법을 기술 한 것이다. API 도큐먼트는 자바 표준 모듈에 있는 패키지 중 public과 prtected로 접근 제한된 클래스와 메소드만 소개한다. 자바 표준 모듈에 있는 패키지 중에서 default와 private로 접근 제한된 클래스와 메소드는 접근 제한자에 대해 잘 알고 있다면 우리는 접근할 수 없다는 것을 알 수 있..
이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 사용자 정의 예외 사용자 정의 예외란 예를 들어 은행의 뱅킹 프로그램에서 잔고보다 더 많은 출금 요청이 들어온 경우에는 잔고 부족 예외를 발생 시킬 필요가 있다. 하지만 잔고 부족 예외는 자바의 표준 라이브러리에는 존재하지 않기 때문에 직접 예외 클래스를 정의해서 사용해야 한다. 이렇게 사용자가 직접 예외 클래스를 정의하는 것을 사용자 정의 예외 클래스라고 한다. 사용자 정의 예외는 일반 예외와 실행 예외로 선언할 수 있다. 일반 예외 : 컴파일러가 체크, Exception의 자식 클래스로 선언 실행 예외 : 컴파일러가 체크하지 않음, RunTimeException의 자식 클래스로 선..
이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 리소스란 데이터를 제공하는 객체(DB 등)를 뜻한다. 리소스를 사용하기 위해선 열어야 하고, 사용이 끝나면 반드시 닫아야 한다. 리소스를 사용하고 닫지 않으면 불안정한 상태로 남게 된다. try-catch-finally문 리소스를 자동으로 닫는 기본적인 방법은 try-catch-finally문에서 finally 부분에 리소스를 닫는 코드를 넣어주면 된다. finally는 예외가 발생하든 안 하든, 메소드가 return문을 만나도 무조건 실행되기 때문이다. FileInputStream fis = null; try { fis = new FileInputStream("file.tsxt");..
일반적으로 객체 지향 프로그래밍에서는 객체의 필드를 객체 외부에서 직접적으로 접근하는 것을 막는다. 왜냐하면 예를 들어 속력은 음수가 될 수 없는데, 외부에서 속력을 저장하는 변수에 음수를 저장하면 문제가 생긴다. 이를 무결성이 깨졌다고 한다. 이러한 문제점을 해결하기 위해 객체 지향 프로그래밍에서는 메소드를 통해서 필드를 변경하는 방법을 선호한다. 필드는 외부에서 접근할 수 없게 하고(private 접근 제한자 사용), 메소드는 접근할 수 없는 필드에 접근할 수 있도록 한다. 이러한 메소드를 Setter라고 한다. 외부 객체에서 데이터를 읽을 때도 메소드를 사용하는 것이 좋다. 왜냐하면 필드값을 직접 사용하면 부적절한 경우도 있기 때문이다. 이런 경우에는 메소드로 필드값을 가공한 후 외부로 전달하면 된..
이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 리플렉션 리플렉션이란 실행 도중에 타입(클래스, 인터페이스 등)을 검사하고 구성 멤버를 조사하는 것을 말한다. 이클립스 개발환경에서 outline과 비슷하다고 생각하면 된다. 자바는 클래스와 인터페이스의 메타 정보를 Class 객체로 관리한다. 메타 정보 패키지 정보, 타입 정보, 멤버(생성자, 필드, 메소드) 정보 등을 말한다. 이러한 메타 정보를 프로그램에서 읽고 수정하는 행위를 리플렉션이라고 한다. 프로그램에서 Class 객체를 얻으려면 아래의 3가지 방법 중 하나를 이용한다. Class clazz = 클래스이름.class; //클래스로부터 얻는 방법 Class clazz = C..