◎ Java/Java☕

    [JAVA] long 타입에 접미사 'L'이 없으면 무슨 타입으로 인식될까? [변수의 타입과 접미사의 중요성]

    - long 타입에 접미사 'L'이 없으면 무슨 타입으로 인식될까? Java에서 숫자 리터럴을 표현할 때, 기본적으로 정수형은 int 타입으로 인식된다. long 타입의 숫자 리터럴을 표현할 때는 리터럴 값 끝에 대문자 L 또는 소문자 l을 붙여주어야 한다. long 타입의 숫자 리터럴에 대문자 L 또는 소문자 l을 붙이지 않고 그냥 숫자만 표현하면, Java 컴파일러는 해당 리터럴을 int 타입으로 인식한다. 따라서 long 타입으로 인식하기 위해서는 반드시 L 또는 l을 붙여주어야 한다. // long 타입 리터럴 long l = 123456789L; // int 타입으로 인식됨 long l2 = 10_000_000_000; // 에러 발생. // long 타입으로 인식하려면 10000000000L과..

    [JAVA] 변수의 메모리 할당 시점과 삭제 시점 [메모리 할당 시점, 삭제 시점, 블록 내에서의 메모리 재사용]

    - 변수의 메모리 할당 시점과 삭제 시점 1. 메모리 할당 시점 변수가 선언되면 해당 변수에 대한 메모리 공간이 할당되며, 이 때 변수의 타입에 따라 할당되는 메모리의 크기가 결정된다. 변수가 선언된 블록에서만 사용할 수 있으며 해당 블록이 실행될 때 메모리에 할당된다. 2. 삭제 시점 변수의 생명 주기는 해당 변수가 선언된 블록의 실행이 끝날 때까지이며, 블록이 실행되는 동안 변수는 유효하다. 블록이 실행을 마치면, 해당 블록에서 선언된 모든 변수들은 메모리에서 삭제된다. 객체가 변수일 경우, 해당 객체에 대한 참조 카운트가 0이 되면 가비지 컬렉터(Garbage Collector)가 메모리에서 삭제한다. 3. 블록 내에서의 메모리 재사용 Java는 스택(Stack)과 힙(Heap) 영역으로 메모리를 ..

    [JAVA] 향상된 for문 사용 시 주의사항 [개선된 for문, foreach문]

    - 향상된 for문 사용 시 주의사항 향상된 for문은 JDK 1.5 이상부터 추가된 반복문이다. → 반복문에 사용될 대상은 배열이나 여러 원소를 포함한 자료형이어야 한다. ex) String[], ArrayList int[] nums = int[10]; // 반복문에 사용할 배열 // 기존 for문 for(int i = 0 ; i < nums.length ; i++) { // 반복할 내용 } // 향상된 for문 for(int num : nums) { // 반복할 내용 } 향상된 for문은 기존 for문에 비해 가독성이 좋다는 장점이 있으나.. 1) index를 사용하지 못하며, 2) 배열의 값을 수정할 수 없다는 단점이 있다. (read only)

    [JAVA] 추상클래스(abstract class)와 인터페이스(interface)의 차이 [추상클래스 VS 인터페이스, 예제를 통한 차이 비교]

    - 추상클래스(abstract class)와 인터페이스(interface)의 차이 1. 추상클래스(abstract class)란? 추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스 → 미완성 설계도라 표현하며, 상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없다. abstract class 클래스이름 { ... public abstract void 메서드이름(); } 2. 인터페이스(interface)란? 추상클래스가 미완성 설계도라면 인터페이스는 기본 설계도와 같음 → 추상클래스처럼 다른 클래스를 작성하는데 도움을 주며, 다중상속(구현)이 가능하다. interface 인터페이스이름 { public static final 상수이름 = 값; public abstract..

    [JAVA] 클래스 간의 관계 [Composite, 포함관계, 관계 결정하기]

    1. 클래스 간의 관계 상속 이외에도 클래스를 재사용하는 방법이 있다. 클래스 간에 '포함(Composite)' 관계를 맺어 주는 것 → 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언 원(Circle)을 표현하기 위한 Circle이라는 클래스가 있다. class Circle { int x; // 원점의 x좌표 int y; // 원점의 y좌표 int r; // 반지름(radius) } Point 클래스를 재사용해서 Circle 클래스를 작성한다면 다음과 같이 할 수 있다. class Circle { Point c = new Point(); // 원점 int r; // 반지름(radius) } class Point { int x; // x좌표 int y; // y좌표 } 하나의 거대한 클래스를 ..