◎ Java/Java☕
[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좌표 } 하나의 거대한 클래스를 ..
[JAVA] 상속(inheritance)이란? [상속의 개념, 조상 클래스와 자손 클래스]
1. 상속(inheritance)이란? 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것 상속을 통해, 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있다. → 클래스 이름 뒤에 상속받고자 하는 클래스의 이름과 그 앞에 키워드 'extends'만 붙여주면 된다. class Child extends Parent { // Child 클래스가 Parent 클래스를 상속 받았다. } 2. 조상 클래스와 자손 클래스 위의 두 클래스는 서로 상속 관계에 있다고 한다. 상속해주는 클래스를 '조상 클래스', 상속 받는 클래스를 '자손 클래스'라 한다. 조상 클래스 : 부모(parent) 클래스, 상위(super) 클래스, 기반(base) 클래스 자손 클래스 : 자식(child..
[JAVA] 멤버변수의 초기화 시기와 순서 [클래스변수와 인스턴스변수의 초기화 순서]
1. 멤버변수의 초기화 시기와 순서 클래스변수의 초기화 시점 : 클래스가 처음 로딩될 때 단 한 번 초기화 된다. 인스턴스변수의 초기화 시점 : 인스턴스가 생성될 때마다 각 인스턴스 별로 초기화가 이루어진다. 클래스변수의 초기화 순서 : 기본값 → 명시적초기화 → 클래스 초기화 블럭 인스턴스변수의 초기화 순서 : 기본값 → 명시적초기화 → 인스턴스 초기화 블럭 → 생성자 2. 멤버변수 초기화 순서 예시 class InitTest { // 명시적 초기화 static int cv = 1; int iv = 1; static { cv = 2; } // 클래스 초기화 블럭 { iv = 2; } // 인스턴스 초기화 블럭 // 생성자 InitTest() { iv = 3; } } 클래스변수 초기화(1 ~ 3) : 클..