본문 바로가기

BackEnd

(97)
상수 (final) 상수 (final) 란? - '변경의 마지막'이라는 의미로 사용되는 키워드 1. 변수에 final 키워드가 사용 될 경우 - 변수 값 변경 불가 - 반드시 초기화 코드가 포함되어야 함 - 초기화 코드를 포함하지 않는 변수를 blank final 변수라고 하며 생성자에서 반드시 해당 변수 초기화가 수행되어야 함 (= 주로 객체마다 다른 고정된 값을 사용해야 하는 경우) - 상수 이름의 규칙은 단어간의 구분 시 언더스코어(_) 기호 사용, 모두 대문자 (ex: MY_NAME) 2. 메서드에 final 키워드가 사용 될 경우 - 메서드 오버라이딩 불가 (슈퍼클래스의 메서드를 상속받아 그대로 사용하는 것은 가능) 3. 클래스에 final 키워드가 사용 될 경우 - 클래스 상속 불가 (해당 클래스의 인스턴스 생성..
동적바인딩과 다형성(polymorphism) * 동적바인딩이란? 상속 관계에서 업캐스팅 후 메서드를 실행할 때, 컴파일 단계에서의 실행 대상과 실행 단계에서의 실행 대상이 달라지는 것 즉, 참조 변수의 타입과 무관하게 실제 인스턴스의 메서드를 실행하는 것이다 * 다형성(polymorphism)이란? 하나의 참조변수로 여러 인스턴스를 참조할 수 있는 특성. 인스턴스를 업캐스팅하여 슈퍼클래스 타입으로 서브클래스의 멤버를 다루는 것 class Triangle extends Shape { @Override public void draw() { System.out.println("삼각형 그리기"); } } Triangle ta = new Triangle(); // 슈퍼클래스의 메서드를 상속받아 오버라이딩을 할 경우 코드의 통일성이 향상됨 ta.draw();..
같은 참조 타입인지 확인하는 instanceof 연산자 주로 업캐스팅, 다운캐스팅을 할 때 실제 instanceof 연산자를 통하여, 좌변의 객체(참조변수)가 우변 클래스의 타입과 같은 타입인지 판별하는 연산자이다 판별 결과가 true라면 형변환이 가능한 관계라는 것을 뜻한다 예문 Child c = new Child(); if(c instanceof Parent) { // c is a Parent? System.out.println("c는 Parent이다"); // 형변환이 가능한 true이니 업캐스팅 실시 Parent p = c; p.parentPrn(); } else { // false : 형변환이 불가능한 관계 System.out.println("응 c는 Parent 아니야"); } 형변환이 가능한지 이론적으로 관계를 따져볼 때 is-A 또는 has-A..
레퍼런스 형변환 (업캐스팅, 다운캐스팅) 레퍼런스 형변환이란? - 참조형 변수끼리의 형변환 - 업캐스팅과 다운캐스팅으로 나뉨 - 참조형 변수로 다른 타입의 인스턴스를 참조하기 위해 변환하는 것 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에는 영향이 없다