BackEnd/Java (30) 썸네일형 리스트형 레퍼런스 형변환 (업캐스팅, 다운캐스팅) 레퍼런스 형변환이란? - 참조형 변수끼리의 형변환 - 업캐스팅과 다운캐스팅으로 나뉨 - 참조형 변수로 다른 타입의 인스턴스를 참조하기 위해 변환하는 것 1. 업캐스팅 (UpCasting) - 슈퍼클래스의 레퍼런스가 서브클래스의 인스턴스를 가리키는 것 - 묵시적 형변환(자동)이 일어남 - 참조 가능한 영역의 축소 발생 (슈퍼클래스로부터 상속된 멤버에만 접근 가능하고, 서브클래스 멤버 접근 불가) 아래 예문을 기준으로 설명 스타트!! class Parent { public void parentPrn() { System.out.println("슈퍼클래스의 parentPrn()"); } } class Child extends Parent { public void childPrn() { System.out.pri.. 메서드 오버라이딩 (Overriding) ** 오버라이딩의 정의와 필요성에 대해 설명하시오 오버라이딩이란 상속받은 부모 관계의 클래스의 메서드와 시그니처(이름, 파라미터 등)가 완벽하게 동일한 메서드를 새롭게 재정의하는 것이며, 자식 클래스가 최대한 상속받은 메서드를 활용할 수 있도록 하는 것 오버라이딩 단축키 : Alt + Shift + S + v 자동으로 오버라이딩을 하면 오버라이딩 된 메서드 위에 '@Override'라는 어노테이션(Annotation, 주석)이 붙는데 이 주석이 붙는 이유는 코딩의 실수를 방지하기 위함이다. 이 주석은 컴파일 시 오버라이딩 된 메서드 코드를 검증하는데 오버라이딩이 실제로 시행되지 않았다면 에러를 발생시킨다. [ 오버라이딩의 조건 ] 1. 상속이 필수로 전제되어야 함 2. 메서드 시그니처 (이름, 파라미터의.. 접근제한자 접근제한자의 종류와 범위의 순서 public > protected > default > private public : 모든 패키지의 모든 클래스에서 접근 가능 (= 누구나 접근 가능) protected : 같은 패키지 or 패키지가 달라도 상속 관계라면 접근 가능 default : 같은 패키지 내에서만 접근 가능 private : 자신의 클래스에서만 접근 가능 (= 다른 클래스에서 접근 불가) protected와 default가 헷갈릴 수도 있는데 protected는 상속 관계일 땐 얘기가 달라지니 꼭 기억하도록 하자! 상속 (Inheritance) 상속 : 프로그램에서의 상속은 기존 클래스의 재산을 다른 클래스에서 재사용하기 위한 것 - is-A 관계가 성립하는 객체관의 관계 - 생성자는 상속받을 수 없음 - 별도로 상속 대상을 지정하지 않을 경우 Object 클래스를 자동으로 상속받는다 (java.lang.Object - 모든 클래스의 최상위 클래스) 상속으로 얻는 장점 1. 코드의 절감 효과 (중복 제거) 2. 유지보수성 향상 기본 문법 class 서브클래스 extends 슈퍼클래스 {} 예문 class Parent { String name; public void parentPrn() { System.out.println("슈퍼클래스의 parentPrn()"); } } class Child extends Parent { public void c.. 기본형 변수와 참조형 변수의 차이 기본형(Primitive Type) : 실제 값(리터럴)을 저장 (Pass by Value) 참조형(Reference Type) : 인스턴스의 주소값(참조값)을 저장 - 변수의 값을 복사할 때 (인스턴스도 마찬가지) 1) 기본형 : 복사본과 원본은 아무런 관계가 없으므로 복사본의 값을 변경해도 원본이 변경되지 않음 int x = 10; int y = x; // 변수 x 값을 복사 (기본형 변수 복사 = 실제 데이터의 복사) 결과 x = 10, y = 10 2) 참조형 : 복사본과 원본은 같은 주소값을 가지므로 같은 인스턴스를 가리킴 int x = 99; int y = x; x = 99; // 실제 값 변경 결과 x = 99, y = 10 // 실제 값(x)을 변경하더라도 복사된 값을 갖는 y에는 영향이 없다 super, 부모를 가리키는 예약어 ** super, super()를 비교하여 설명하시오 super : 부모클래스 멤버에 접근하고자 할 때 사용 super() : 부모클래스의 생성자를 요구 할 때 사용 => 반드시 첫번째 문장에 와야 함 class Human{ public String toString() { } } class Student extends Human { public String toString() { return super.toString() + " "; } } class Human { public void info() { } } class Student extends Human { public void pro() { info(); // 호출 하게 되면 재정의한 info()가 우선순위가 된다. super.info(); // .. this, 자신을 가리키는 예약어 > 생성자 또는 메서드 내에서 로컬변수와 멤버변수의 이름이 같을 때 멤버변수를 지정하기 위한 키워드로 사용 된다 객체에 대한 레퍼런스(참조값)이기 때문에 객체가 생성되기 전에는 사용할 수 없다 따라서 static 영역에서는 this 키워드를 사용할 수 없다 기본 문법 this.멤버변수 this를 사용하지 않았을 때 class Person4 { String name; // 멤버변수 public Person4(String name) { // 로컬변수 name = name; } } 클래스 내에서 사용한 name이라는 로컬변수의 영향이 더 크기 때문에 로컬변수 name에 로컬변수 name을 저장한다는 의미라 경고가 발생한다 (의미없는 일이기 때문) this를 사용했을 때 class Person4 { String.. 생성자 (Constructor) 리턴 타입이 없고 이름을 클래스명과 동일하게 정의 메서드와 마찬가지로 파라미터가 없을 수도 있고 있을 수도 있음 별도의 생성자를 만들지 않았을 때 컴파일러에 의해 자동으로 생성 됨 파라미터 생성자를 추가하면 컴파일러는 기본 생성자를 별도로 생성하지 않음 생성자는 반드시 최소 한 개 이상이 존재해야 함 (기본생성자 포함) 기본 문법 [제한자] 클래스명([파라미터...]) { ... } 기본 생성자란? public static void main(String[] args) { DefaultPerson dp = new DefaultPerson(); // 파라미터가 없는 메서드 생성자를 호출 (기본생성자) } class DefaultPerson { String name; public DefaultPerson() .. 이전 1 2 3 4 다음