본문 바로가기

Back-end/Java

(89)
[Java - 기본] super - 부모 참조 ✅ super - 부모 참조부모와 자식의 필드명이 같거나 메서드가 오버라이딩 되어 있으면, 자식에서 부모의 필드나 메서드를 호출할 수 없다.이때 super 키워드를 사용하면 부모를 참조할 수 있다. super는 부모 클래스에 대한 참조를 나타낸다. 다음 예를 보자. 부모의 필드명과 자식의 필드명이 둘다 value이다. 메서드도 hello()로 자식에서 오버라이딩 되어 있다.이때 자식 클래스에서 부모 클래스의 value와 hello()를 호출하고 싶다면 super 키워드를 사용하면 된다.✏️ Parentpackage extends1.super1;public class Parent { public String value = "parent"; public void hello() { System.out..
[Java - 기본] 상속과 접근 제어 ✅ 상속과 접근 제어상속 관계와 접근 제어에 대해 알아보자. 📚 UML 표기법+ : public# : protected~ : default- : private📚  접근 제어자의 종류private : 모든 외부 호출을 막는다.default(package-private) : 같은 패키지 안에서 호출은 허용한다.protected : 같은 패키지 안에서 호출은 허용한다. 패키지가 달라도 상속 관계의 호출은 허용한다.public : 모든 외부 호출을 허용한다. private이 가장 많이 차단하고, public이 가장 많이 허용한다.private → default → protected → public✏️ Parentpackage extends1.access.parent;public class Parent { ..
[Java - 기본] 상속과 기능 추가 ✅ 상속 관계의 장점 - 기능 추가 상속 관계의 장점을 알아보기 위해, 다음 기능을 추가해보자. 모든 차량에 문열기(openDoor()) 기능을 추가해야 한다. 새로운 수소차(HydrogenCar)를 추가해야 한다. 수소차는 fillHydrogen() 기능을 통해 수소를 충전할 수 있다. ✏️ ex3.Car package extends1.ex3; public class Car { public void move() { System.out.println("차를 이동합니다."); } // 추가 public void openDoor() { System.out.println("문을 엽니다."); } } 모든 차량에 문열기 기능을 추가할 때는 상위 부모인 Car에 openDoor() 기능을 추가하면 된다. 이렇게 ..
[Java - 기본] 상속과 메모리 구조 ✅ 상속과 메모리 구조 상속 관계를 객체로 생성할 때 메모리 구조를 확인해보자. ElectricCar electricCar = new ElectricCar(); 📄 new ElectricCar() 호출 new ElectricCar()를 호출하면 ElectricCar 뿐만 아니라 상속 관계에 있는 Car까지 함께 포함해서 인스턴스를 생성한다. 참조값은 x001로 하나이지만 그 안에서는 Car, ElectricCar라는 두가지 클래스 정보가 공존하는 것이다. 상속이라고 해서 단순하게 단순하게 부모의 필드와 메서드만 물려 받는게 아니다. 상속 관계를 사용하면 부모 클래스도 함께 포함해서 생성된다. 외부에서 볼때는 하나의 인스턴스를 생성하는 것 같지만 내부에서는 부모와 자식이 모두 생성되고 공간도 구분된다. 📄..
[Java - 기본] 상속 관계 ✅ 상속 상속은 객체 지향 프로그래밍의 핵심 요소 중 하나로, 기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용하게 해준다. 이름 그대로 기존 클래스의 속성과 기능을 그대로 물려받은 것이다. 상속을 사용하려면 extends 키워드를 사용하면 된다. 그리고 extends 대상은 하나만 선택할 수 있다. 📚 용어 정리 부모 클래스 (슈퍼 클래스) : 상속을 통해 자신의 필드와 메서드를 다른 클래스에 제공하는 클래스 자식 클래스 (서브 클래스) : 부모 클래스로부터 필드와 메서드를 상속받는 클래스 ✏️ ex2.Car package extends1.ex2; public class Car { public void move() { System.out.println("차를 이동합니다."); } } Car는 부모..
[Java - 기본] 상속 - 시작 ✅ 상속 - 시작 상속 관계가 왜 필요한지 이해하기 위해 다음 예제 코드를 만들어서 실행해보자. ✏️ ElectricCar package extends1.ex1; public class ElectricCar { public void move() { System.out.println("차를 이동합니다."); } public void charge() { System.out.println("충전합니다."); } } ✏️ GasCar package extends1.ex1; public class GasCar { public void move() { System.out.println("차를 이동합니다."); } public void fillUp() { System.out.println("기름을 주유합니다."); ..
[Java - 기본] final 정리 ✅ final 정리 final은 매우 유용한 제약이다. 만약 특정 변수의 값을 할당한 이후에 변경하지 않아야 한다면 final을 사용하자. 예를 들어 고객의 id를 변경하면 큰 문제가 발생한다면 final로 선언하고 생성자로 값을 할당하자. 만약 어디선가 실수로 id값을 변경한다면 컴파일러가 문제를 찾아줄 것이다. ✏️ Member package final1.ex; public class Member { private final String id; // final 키워드 사용 private String name; public Member(String id, String name) { this.id = id; this.name = name; } public void changeData(String id, ..
[Java - 기본] final 변수와 참조 ✅ final 변수와 참조 final은 변수의 값을 변경하지 못하게 막는다. 그런데 여기서 변수의 값이라는 것이 무엇일까? 변수는 크게 기본형 변수와 참조형 변수가 있다. 기본형 변수는 10, 20 같은 값을 보관하고, 참조형 변수는 객체의 참조값을 보관한다. final을 기본형 변수에 사용하면 값을 변경할 수 없다. final을 참조형 변수에 사용하면 참조값을 변경할 수 없다. ✏️ Data package final1; public class Data { public int value; } int value : final이 아니다. 변경할 수 있는 변수다. ✏️ FinalRefMain package final1; public class FinalRefMain { public static void mai..