Langauge

    [Java] super 키워드와 super() 메서드

    [Java] super 키워드와 super() 메서드

    super 키워드와 super() 메서드 요약 공통적으로 상속 관계를 전제로 한다. super. : 상위 클래스 객체 호출 super() : 상위 클래스 생성자 호출 super 키워드 상위 클래스의 멤버를 가리키는 역할을 한다. 상위 클래스의 필드명과 하위 클래스의 필드명이 중복될 때 상위 클래스의 필드를 호출할 때 사용한다. 메서드 오버라이딩으로 가려진 상위 클래스의 필드 또는 메서드를 호출하기 위해 사용한다. 즉, super 키워드를 사용하면 상위 클래스의 멤버를 사용할 수 있다. super 키워드 구조 // super. 키워드 super.상위 클래스의 멤버 super.필드 상위 클래스의 필드명과 하위 클래스의 필드명이 중복될 때 상위 클래스의 필드를 호출 // super.필드 class Upper ..

    [Java] 메서드 오버라이딩(Method Overriding)

    [Java] 메서드 오버라이딩(Method Overriding)

    메서드 오버라이딩이란 메서드 오버라이딩(Method Overriding)은 상위 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 재정의하는 것 메서드 오버라이딩을 학습하며 가장 떠오른 짤.. "이 메서드는 이제 제 겁니다. 제 마음대로 할 수 있는 것입니다."같은 느낌.. class Animal { public void cry() { System.out.println("울음소리"); } } class Cat extends Animal { @Override public void cry() { // 상위 클래스의 cry() 오버라이딩 System.out.println("냐옹~"); } } class Dog extends Animal { @Override public void cry() { // 상위 클..

    [Java] instanceof : 캐스팅 가능 여부 확인

    [Java] instanceof : 캐스팅 가능 여부 확인

    instanceof 캐스팅의 가능 여부를 판단하기 위해서는 '클래스 사이의 상속 관계', '어떤 생성자로 인스턴스를 생성했는가?'를 판단해야 한다. 프로젝트의 규모가 커지고, 클래스가 많아지면 이러한 조건을 매순간 판단하는 것이 어려워진다. 이를 해결하기 위해 Java에서는 캐스팅 가능 여부를 boolean 타입으로 반환해주는 instanceof라는 연산자를 제공한다. 소스 코드가 길어져 일일이 생성 객체의 타입을 확인하기 어려운 상황에서 에러를 최소화하는 유용한 수단이 될 수 있다. -> 캐스팅 가능 여부를 확인하고, 가능한 때만 캐스팅을 수행해 실행 예외로 프로그램이 종료되는 것을 방지할 수 있다. 참조 변수 instanceof 타입명 예시 public class Test { public static..

    [Java] 업 캐스팅과 다운 캐스팅

    [Java] 업 캐스팅과 다운 캐스팅

    타입에 따른 업캐스팅과 다운캐스팅 기본자료형 업캐스팅 : 범위가 좁은 쪽에서 넓은 쪽으로 캐스팅 다운캐스팅 : 범위가 넓은 쪽에서 좁은 쪽으로 캐스팅 객체 업캐스팅 : 하위 클래스에서 상위 클래스로 캐스팅 다운캐스팅 : 상위 클래스에서 하위 클래스로 캐스팅 객체의 업 캐스팅과 다운 캐스팅 객체의 업 캐스팅은 항상 할 수 있으며, 명시적으로 적어주지 않아도 컴파일러가 대신 넣어준다. 객체의 다운 캐스팅은 반드시 명시적으로 적어주어야 하며, 또한 명시적으로 적어도 다운 캐스팅 자체가 안 될 때가 있다. 잘못된 다운 캐스팅을 수행하면 'ClassCastException'이라는 예외가 발생하며 프로그램이 종료된다. public class Main { public static void main(String[] a..

    [Java] 상속 관계와 포함 관계

    [Java] 상속 관계와 포함 관계

    상속 상속이란 상속이란 기존 클래스를 재사용하여 새로운 클래스를 작성하는 자바의 문법 요소로 상위 클래스의 멤버를 내려받아 하위 클래스 내부에 포함시키는 역할을 한다. 여기서 기존 클래스는 상위(부모) 클래스, 새로운 클래스는 하위(자식) 클래스라고 한다. 상위 클래스와 하위 클래스는 서로 상속 관계라고 하며, 하위 클래스는 상위 클래스가 가진 모든 멤버를 상속받는다. '하위 클래스는 상위 클래스로부터 확장되었다'라고 표현한다. 상속 관계로 정의하기 위해서는 '하위 클래스는 상위 클래스다' 라는 조건이 참이어야 한다. -> ex. '고양이는 동물이다.'(상속 가능) / '취준생은 학생이다.' (상속 불가능) 상속의 장점 코드의 중복성 제거 클래스의 다형적 표현 가능 다형성 : 1개의 객체를 여러 가지로 ..

    [Java] final 키워드

    final 변수 final 키워드는 변수를 선언할 때 지정하며, 한 번 초기화된 값은 최종값으로 재할당할 수 없다. (변경 불가) 변경의 범위는 그 변수의 값에 한정된다. 클래스 내의 필드는 초기화를 하지 않으면 자동으로 강제 초기화가 되지만 final 변수는 강제 초기화되지 않는다. (지역 변수, 필드 관계없음) final로 선언된 변수는 초기화될 때 상수 영역에 필드와 값이 복사된다. final 자료형 변수명; // 예시 public class Main { public static void main(String[] args) { final MyClass1 mc = new MyClass1(10, 10); // num1 = 10, num2 = 10 mc.num1 += 10; // '변경의 범위는 그 변수..

    [Java] static 키워드

    [Java] static 키워드

    static 키워드 static은 클래스의 멤버(필드, 메서드, 이너 클래스)에 사용하는 키워드 static 키워드가 붙은 멤버를 '정적 멤버'라고 부르며, 인스턴스 생성 없이 '클래스명.멤버명'만으로 사용할 수 있다. 정적 멤버는 인스턴스를 생성한 후 참조 변수를 통해 사용할 수도 있지만, 정적 멤버임을 나타내기 위해 권장 x 정적 필드 메모리가 독립되어 있다. -> 정적 필드는 클래스 내부에 저장 공간을 지니며, 인스턴스 내부에는 실제 정적 필드의 저장 공간의 주소값만 포함하고 있다. 정적 필드는 객체 간 공유 변수의 성질을 가지고 있다. 이러한 특징으로 정적 필드를 클래스별로 관리하는 '클래스 필드'라고 한다. public class Main { public static void main(Strin..

    [Java] 접근 제어자 public / protected / default / private

    접근 제어자 접근 제어자는 자바 제어자의 한 종류로, 사용 범위를 정의하는 역할을 한다. 접근 제어자는 각 대상에 대해 딱 한 번 정의할 수 있다. 접근 제어자는 클래스, 멤버, 생성자 앞에 위치할 수 있다. 아무것도 지정하지 않으면 default 접근 제어자가 자동으로 설정된다. 멤버 및 생성자의 접근 제어자 멤버 및 생성자에는 public, protected, default(package), private라는 4가지 종류의 접근 제어자를 사용할 수 있다. 접근 제어자 접근 제한 범위 public 접근 제한 없음 protected 동일 패키지 + 다른 패키지의 하위 클래스에서 접근 가능 default 동일 패키지 내에서만 접근 가능 private 동일 클래스에서만 접근 가능 사용 가능 범위 : publ..

    [Java] 이너 클래스

    [Java] 이너 클래스

    이너 클래스(Inner Class) 이너 클래스는 클래스 내부에 포함되는 클래스로, 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용한다. 이너 클래스를 사용하면 접근 지정자와 관계없이 외부 클래스의 멤버들에 쉽게 접근할 수 있고, 코드의 복잡성을 줄일 수 있다. 또한 외부적으로 불필요한 데이터를 감출 수 있어 캡슐화를 달성하는데 유용하다. 이너 클래스는 인스턴스 멤버 이너 클래스, 정적 멤버 이너 클래스, 지역 이너 클래스로 나뉜다. 이너 클래스도 클래스이기 때문에 바이트 코드(.class) 파일이 생성된다. // 외부 클래스 class Outer { // 인스턴스 멤버 이너 클래스 class Inner { } // 정적 멤버 이너 클래스 static class StaticInner { } vo..

    [Java] 외부 클래스

    외부 클래스(external class) 1개의 자바 소스 파일에는 1개의 public class만 존재할 수 있다. 소스 파일 내의 1개의 public class를 제외한 모든 클래스를 외부 클래스라고 한다. 외부 클래스는 다른 패키지에서 임포트할 수 없으며, 같은 패키지 내에서만 사용할 수 있다. 외부 클래스를 다른 패키지에서 사용하려면 외부 클래스를 별도의 소스파일로 분리 후 public class로 변경해야 한다. public class MyClass1 { // public 클래스, 다른 패키지에서 임포트 가능 ... } class MyClass2 { // 외부 클래스, 다른 패키지에서 임포트 불가능 ... } // ===================== 구분선 ===================..