[JAVA] 제네릭
·
Programming Language/자바(JAVA)
제네릭결정되지 않은 타입을 파라미터로 처리하고 실제 사용할 때 파라미터를 구체적인 타입으로 대체시키는 기능아래와 같이 Box 클래스를 선언하려고 하는데 필드의 타입을 무엇으로 할지 결정되지 않은 경우 모든 클래스의 조상인 Object 타입으로 선언할 수 있다.이렇게 하면 강제 타입 변환을 통해 어떤 객체든 대입될 수 있다.해당 필드를 얻을 때 어떤 타입인지 알 수 없으므로 강제 타입 변환을 통해 얻어야 한다.하지만 모든 클래스를 대상으로 조사해서 얻는 것은 불가능하기 때문에 Object 타입을 이용하는 것은 적절하지 않다.public class Box { public ? content;}이런 경우 사용하는 것이 제네릭이다. 아래 예시로 보자선언부에 부모를 붙이고 그 안에 타입 파라미터를 위치한다.:..
[JAVA] java.base 모듈 - 각종 클래스, 리플렉션, 어노테이션
·
Programming Language/자바(JAVA)
Object 클래스JAVA의 모든 클래스는 Object의 자식 or 자손 클래스클래스를 선언할 때 extends로 상속받지 않으면 암시적으로 Object 클래스 상속 받음Object 메소드 - equals(), hashCode(), toString()equals()boolean equals(Object obj)객체의 번지(주소)를 비교하고 결과를 리턴(== 연산자와 같은 기능)String에서 equals()String에서는 객체의 번지가 아닌 내용을 주소하도록 오버라이딩되어 있다.==와 다르게 리터럴로 선언했든 객체 생성 연잔사(new)로 선언했든 상관 없이 값으로만 비교하여 반환한다.public class Main { public static void main(String[] args) { ..
[JAVA] 중첩 클래스, 중첩 인터페이스, 익명 객체
·
Programming Language/자바(JAVA)
중첩 클래스클래스 내부에 선언한 클래스특정 클래스만 관계를 맺을 경우 중첩 클래스로 선언 -> 유지보수 도움클래스 멤버 쉽게 사용할 수 있고 외부에는 중첩 관계 클래스 감춤으로써 코드 복잡성↓중첩 클래스도 컴파일하면 바이트코드 파일(.class)이 별도로 생성된다.파일 이름멤버 클래스: A(바깥 클래스) $ B(멤버 클래스) .class로컬 클래스: A(바깥 클래스) $1 B(로컬 클래스) .class인스턴스 멤버 클래스인스턴스 멤버 클래스 B는 주로 A 클래스 내부에서 사용되므로 private 접근 제한자 갖는다.B 객체는 A 객체가 있어야 사용 가능하기 때문에 A 클래스 내부 아무데서나 사용 불가능필드, 생성자, 메소드에서 B 객체 생성 가능public class A { // ★ 인스턴스 멤버 ..
[JAVA] 인터페이스
·
Programming Language/자바(JAVA)
인터페이스란?두 장치를 연결하는 접속기만약 객체 A가 객체 B를 직접 사용한다면 객체 A의 소스 코드를 객체 B에서 C로 변경하는 작업 필요그러나 객체 A가 인터페이스의 메소드를 호출한다면 객체 B가 C로 변경된 것에는 신경쓸 필요 없음즉, 객체 A는 신경쓸 필요 없이 인터페이스만 고치면 된다.인터페이스 선언 - interfacepublic interface 인터페이스명 { // public 상수 필드 // public 추상 메소드(구현 클래스에서 구현해야 함) // public 디폴트 메소드(default) // public 정적 메소드 // private 메소드 // private 정적 메소드(static)}구현 클래스 선언 - implementspublic class..
[JAVA] 상속
·
Programming Language/자바(JAVA)
상속이란부모 클래스의 필드, 메소드를 자식 클래스에게 물려주는 것클래스 이름 뒤에 extends 부모클래스로 상속 받을 부모 클래스를 설정상속은 한 부모 클래스로부터만 받을 수 있음public class 자식클래스 extends 부모클래스 {}부모 생성자 호출자식 클래스의 객체를 생성하면 부모 객체가 먼저 생성된 다음 자식 객체가 생성된다.super() 메소드로 부모 클래스의 생성자를 실행하여 부모 객체 생성public 자식클래스(...) { super(); // 부모 객체 생성(생략 가능) ...}부모 클래스에 기본 생성자가 없는 경우super() 메소드에 인자를 넣음public 자식클래스(...) { super(매개값, ...); ...}매소드 오버라이딩부모 클래스의 메소드를 자..
[JAVA] 클래스 - 접근 제어자, final, static
·
Programming Language/자바(JAVA)
객체 지향 프로그래밍 특징 4가지캡슐화외부에서 객체 내부 구조(필드, 메소드)를 알지 못하고 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있는 것노출 여부는 접근 제한자를 이용하여 결정한다.상속부모 객체가 자신이 가지고 있는 필드와 메소드를 자식 객체가 사용할 수 있도록 물려주는 것상속 장점코드 재사용성↑유지 보수 시간↓다형성하나의 객체(Object) 혹은 메서드가 여러 가지 타입을 가질 수 있는 것주로 상속에서 이용한다.아래 사진과 같이 void 반환형에 인자가 없는 printClass를 상속 받아서 String 반환형에 String str 인자가 있는 printClass로 재정의하는 것을 의미한다. 재정의에는 두 가지 방법이 있다.오버라이딩슈퍼클래스를 상속받은 서브 클래스에서 슈퍼 클래스의 (..