일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 포함관계
- StackArea
- java
- 42seoul
- RDD
- pg_hba.conf
- la-piscine
- generics
- 제네릭스
- 바이트코드
- Operating System
- 이노베이션아카데미
- 참조변수
- MethodArea
- JIT
- classloader
- LSP
- 운영체제
- SRP
- JVM
- Compiler
- abstract
- HeapArea
- javac
- 상속관계
- 42서울
- 라피신
- 자바컴파일러
- jdk
- 도커네트워크
- Today
- Total
목록CS/java (12)
while(1) 작심삼일();
다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능이다. 이로인해, 객체의 타입 안정성을 높이고, 형변환의 번거로움이 줄어 코드가 간결해진다. class A { Object obj; void setObj(Object obj) { this.obj = obj; } Object getItem() { return obj; } } 이러한 클래스가 존재한다고 가정했을 때 제네릭 클래스로 변경하면 class A { T obj; void setObj(T obj) { this.obj = obj; } T getItem() { return obj; } } A a = new A(); a.set("ABC"); 여기서 T는 Type의 약자이고, 그 어떠한 것을 써도 상관은 없다. 이것을 타..

추상화 : 클래스간의 공통점을 찾아내서 공통의 부모를 만드는 작업 인터페이스 : 추상클래스보다 추상화정도가 높기 때문에 일반 메서드나 멤버변수를 포함할 수 없고 오직 추상메서드와 상수만을 갖는다. (jdk 1.8부터는 static, default 메소드도 추가가 가능하다) 클래스와 다르게 다중상속이 가능하다. 인터페이스로 부터 상속받은 추상메서드를 구현할때는 접근제어자를 public으로 해야한다. (인터페이스에서 public abstract가 생략되어 있기 때문) 모든 멤버변수는 public static final 이어야 한다. 모든 메서드는 public abstract 이어야 한다. 자바에서는 다중상속의 단점이 더 많기 때문에 사용되지 않는다. 그렇지만 인터페이스로 다중상속이 가능하다고 해서, 인터페이..
다형성 : 부모클래스 타입의 참조변수로 자식클래스의 인스턴스를 참조할 수 있는 것 class Car { String Color; void move() {}; } class Ferrari extends Car { void boostMode() {}; } 이와 같은 상속관계가 있다고 했을 때, // 선언 가능 Ferrari f = new Ferrari(); Car c = new Ferrari(); 이런 선언은 가능하다. 물론 참조변수 c로는 Ferrari 인스턴스에 boostMode는 사용할 수 없다. 둘 다 같은 Ferrari타입의 인스턴스지만 참조변수에 따라 사용할 수 있는 멤버변수의 개수가 다르다. // 선언 불가능. 컴파일 에러 발생 Ferrari f = new Car(); 하지만 이런 경우에는, 참..
두 관계 모두 클래스를 재 사용할 수 있다. 관계를 설정할 때, 상속 : A는 B이다. 포함 : A는 B를 가지고 있다. 라고 적용을 해보면 쉽게 정리될 수 있다. 예를 들어 페라리, 차, 엔진 클래스가 있다고 할 때 페라리는 차이다. (O) 페라리는 엔진이다. (X) 페라리는 차를 가지고 있다. (X) 페라리는 엔진을 가지고 있다. (O) 페라리는 차를 상속받고, 엔진을 멤버변수로 선언해서 포함관계로 설정하면 큰 클래스로 작성하는 것보다 코드도 작게 나눌 수 있고, 이해에도 도움이 되며 유지보수도 수월해진다.
void형 "return ;" 추가 : 반환 타입이 void이므로 생략이 가능하다. 컴파일 시 자동으로 마지막에 "return ;"을 붙여준다. 기본 생성자 추가 : 컴파일 시 .java의 클래스에 생성자가 단 한개도 없을 경우 기본 생성자를 추가해준다. Object클래스 상속 : 다른 클래스로부터 상속을 받지 않는 모든 클래스는 자동으로 "extends Object"를 추가한다. 이렇게 함으로써 모든 클래스들은 Object를 상속받게 된다. 다른 클래스로부터 상속을 받는다면, 그 다른 클래스 또한 결국 Object를 상속받고 있기 때문에 최상위 클래스는 Object가 된다. 부모 클래스의 생성자 호출 : 자식 클래스에서 부모 클래스의 멤버를 사용할수도 있기 때문에 먼저 초기화가 되어 있어야한다. 그렇기..
C언어에서는 문자열을 Char배열로 다루지만, 객체지향언어인 Java에서는 데이터와 그에 관련된 함수들을 하나의 클래스에서 묶어서 다룬다. 즉, 데이터와 함수를 구분하지 않고 함께 묶는 것이다. C언어 Char배열과 String 클래스의 차이는 String은 읽기전용이고 내용을 변경을 할 수가 없다. 그렇기 때문에 String name = "Han"; name += "Jongho"; 이렇게 했을 때 name에는 "HanJongho"가 저장되지만 이것은 변경이 아닌 새로운 메모리에 문자열이 생성되는 것이다.