목록개발공부/JAVA (63)
개발자 도전기
선행 학습 2024.03.12 - [개발공부/JAVA] - [JAVA] 중첩 선언(중첩 클래스, 중첩 인터페이스) [JAVA] 중첩 선언(중첩 클래스, 중첩 인터페이스) 중첩클래스 클래스 내부에 선언하는 클래스를 중첩클래스라 한다. 중첩 클래스가 여러 클래스와 관계를 맺는 것이 아닌 특정 클래스만 관계를 맺을 경우에는 해당 클래스의 중첩 클래스로 선언 abc-datatype.tistory.com 익명 객체란? 익명 객체는 이름이 없는 객체를 말한다. 명시적으로 클래스를 선언하지 않고 객체를 생성하기 때문에 주로 필드값, 로컬 변수값, 매개변수값으로 사용된다 public class C01AnonymousClass { // 익명클래스의 객체 C01MyClass obj = new C01MyClass() { }..
중첩클래스 클래스 내부에 선언하는 클래스를 중첩클래스라 한다. 중첩 클래스가 여러 클래스와 관계를 맺는 것이 아닌 특정 클래스만 관계를 맺을 경우에는 해당 클래스의 중첩 클래스로 선언하는 것이 유지보수의 도움이 된다. 중첩 클래스의 장점 유지보수가 용이하다 클래스의 멤버를 쉽게 사용할 수 있다 외부에는 중첩 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다 클래스는 선언하는 위치에 따라 두 가지로 분류된다 분류 선언 위치 멤버 클래스 클래스 내부 로컬 클래스 클래스의 메소드 내부 중첩 클래스도 하나의 클래스이기 때문에 컴파일하면 바이트코드 파일(.class)이 별도로 생성된다 // A: 바깥 클래스 , B : 멤버 or 로컬 클래스 A $ B .class // 멤버 클래스일 경우 A $1 B .cl..
인터페이스란? 인터페이스는 서로 다른 두 객체를 연결하는 역할을 한다. 예를 들어 객체 A는 인터페이스를 통해 객체 B를 사용할 수 있다. 추상 클래스와 유사하게 추상메소드를 가지기 때문에 생성자와 인스턴스를 생성할 수 없다. 인터페이스와 다형성 객체 A가 인터페이스의 메소드를 호출하면 인터페이스는 객체 B의 메소드를 호출하고 그 결과를 받아 객체 A에 전달해준다. 객체 A가 B를 바로 호출하지 않고 인터페이스를 거치는 이유는 객체 B와 객체 C의 교체를 용이하게 하기 위해서이다. 객체 A가 인터페이스의 메소드만 사용하고 인터페이스가 호출하는 객체만 바꿔준다면 객체 A의 소스코드를 변경하는 작업이 필요하지 않다. 하지만 실행 결과는 객체B, 객체C의 메소드로 다르기 때문에 인터페이스를 통해 다형성 구현이..
어떤 객체가 해당 타입이 맞는지 확인할 때 사용하는 연산자이다. boolean result = 객체 instanceof 타입 좌항의 객체가 우항의 타입이면 true, 그렇지 않으면 false를 산출한다. 자바 12부터는 instanceof 연산 결과가 true일 경우, 우측 타입 변수를 사용할 수 있다 class Parent { method1(){} } class Child extends Parent { method2(){} } public class C04InstanceOf { public static void main(String[] args) { Parent parent = new Child(); // 자바 12부터 가능 if(parent instanceof Child child) { child.m..
final final이 붙으면 변경할 수 없다는 뜻이다. 변수에서의 final은 한 번 값을 할당하면 재할당할 수 없다, 클래스의 final 더 이상 상속할 수 없는 클래스가 된다 메소드의 final 오버라이딩 할 수 없는 메소드가 된다
부모 생성자 호출 현실에서 부모 없는 자식이 있을 수 없듯이 자바에서도 자식 객체를 생성하면 부모 객체가 먼저 생성된 후에 자식 객체가 생성된다. 객체가 생성될 때 생성자를 호출해야 하기 때문에 자식 객체를 생성할 때에는 부모 생성자와 자식 생성자가 호출된다. 이 말은 자식 클래스의 생성자에 부모 생성자도 포함되어 있다는 뜻이다. 사용자가 생성자를 추가하지 않아도 컴파일러는 자식 생성자에 super()를 추가해준다. super()는 기본 부모 생성자를 호출한다. 만약 부모 클래스에 기본 생성자가 없고 매개변수를 갖는 생성자만 있다면 매개변수를 갖는 super(매개값, ..) 코드를 직접 넣어야 한다. 이 코드는 매개값의 타입과 개수가 일치하는 부모 생성자를 호출한다. super 키워드 super는 생성자..
사전적 의미로 추상이란 실체 간의 공통되는 특성을 추출한 것을 말한다. 예를 들어 새, 곤충, 물고기 등의 공통점은 동물이다. 여기서 동물은 실체들의 공통된 특성을 가지고 있지만 실체가 아닌 추상적인 개념이다. 추상 클래스란? 객체를 생성할 수 있는 클래스를 실체 클래스라고 한다면, 이 클래스들의 공통적인 필드나 메소드를 추출해서 선언한 클래스를 추상 클래스라고 한다, 추상 클래스는 실체 클래스의 부모 역할을 한다. 따라서 실체 클래스는 추상 클래스를 상속해서 공통적인 필드나 메소드를 물려받을 수 있다. - 추상 클래스는 new 연산자를 사용해서 객체를 직접 생성할 수 없다 - 추상 클래스는 실체 클래스를 만들기 위한 부모로만 사용된다 추상 클래스 선언 클래스 선언에 abstract 키워드를 붙인다 pu..
상속이란? 상속은 부모 클래스의 필드와 메소드를 자식 클래스에 물려주는 것을 말한다 상속은 왜 필요할까? 상속은 이미 잘 만들어진 클래스를 재사용해서 새로운 클래스를 만들기 때문에 중복되는 코드를 줄여줄 수 있다. 클래스 A, B가 있는데 클래스 A와 클래스 B와 코드가 중복되고 클래스 B가 A보다 조금 더 코드를 많이 가지고 있다면 클래스 A를 부모 클래스로 해서 클래스 A의 필드와 메소드를 자식클래스 B에게 상속하는 것이 효율적이다. 상속의 또다른 이점은 클래스의 수정을 최소화할 수 있다는 것이다. 부모 클래스를 수정하면 자식 필드들의 중복되는 코드들도 모두 수정되기 때문에 개발 시간을 단축시킬 수 있다. 클래스 상속 다음과 같이 자식 클래스에 상속받을 부모를 선언한다. 인터페이스와 달리 상속은 다중..
1. Getter, Setter를 사용하는 이유 객체의 필드(데이터)를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성(결점이 없는 상태)이 깨질 수 있다. 예를 들어 자동차의 속력은 음수가 될 수 없는데, 외부에서 음수로 변경하면 객체의 무결성이 깨진다. 이러한 문제점 때문에 객체 지향 프로그래밍에서는 외부의 필드 접근을 막고 대신 메소드를 통해 필드에 접근하는 것을 선호한다. 그 이유는 메소드를 통해 데이터를 검증해서 유효한 값만 필드에 저장할 수 있기 때문이다. 이러한 역할을 하는 메소드가 Setter이다. 또, 필드값이 객체 외부에서 사용하기에 부적절한 경우 메소드로 적절한 값으로 변환해서 리턴할 수 있다. 이러한 역할을 하는 메소드가 Getter이다. 2. 작성 방법 필드값을 직접적으로 변경하..
1. 캡슐화 객체 지향 프로그램의 특징 중 하나로는 캡슐화가 있다. 캡슐화는 내부의 클래스 멤버들를 외부로부터 보호하며 필요한 기능만을 외부에 노출시키는 것이다. 이러한 기능을 구현하기 위한 것이 접근 제한자이다. 2. 접근 제한자 접근 제한자란 클래스, 또는 클래스 멤버의 사용 범위를 제한할 수 있도록 한다. 접근 제한자에는 public, protected, default, private가 있다. 이 중 public이 가장 접근 범위가 넓으며 private가 가장 접근 범위가 좁다. 접근 제한자 제한 대상 제한 범위 public 클래스, 필드, 생성자, 메소드 없음 protected 필드, 생성자, 메소드 같은 패키지이거나 자식 객체만 사용 가능 default 클래스, 필드, 생성자, 메소드 같은 패키..