BACK/JAVA 36

[JAVA] 실전 자바 - 다형성과 설계

다형성과 설계 객체 지향 프로그래밍: 객체들들이 메세지를 주고받고 데이터를 처리 다형성은 역할과 구현으로 세상을 구분 하는 것 - 클라이언트는 구현 대상 자체가 변경해도 영향을 받지 않고, 대상의 역할(인터페이스)만 알면 된다. - 유연, 변경 용이 역할 = 인터페이스 구현 = 인터페이스를 구현한 클래스 자바 언어의 다형성 ⇒ 오버라이딩 OCP(Open - Closed Principle) 새로운 기능이 추가 되었을 때, 기존 코드는 확장할 수 있다. 기존의 코드는 수정되지 않아야 한다. 운전자는 자동차 인터페이스만 참조해 자동차 역할에만 의존한다. 새로운 차량을 추가해도 운전자의 코드는 바뀌지 않는다.

BACK/JAVA 2024.01.30

[JAVA] 실전 자바 - 다형성(추상 클래스, 인터페이스)

문제점 Animal 클래스를 생성할 필요가 없다. Animal 클래스를 상속받는 곳에서 sound() 메서드를 오버라이딩 하지 않을 가능성이 있다. ⇒ 추상 클래스 도입 추상 클래스 추상적인 개념을 제공하는 클래스로, 인스턴스가 존재하지 않는다. abstract class AbstractAnimal {...} 추상 메서드 추상적인 개념을 제공하는 메서드로 실체가 존재하지 않는다. 자식 클래스가 반드시 오버라이딩 해야 한다. public abstract void sound(); 추상 메서드가 하나라도 있는 클래스는 추상 클래스로 선언해야 한다. -> 그렇지 않으면 컴파일 오류 추상 메서드는 자식 클래스가 오버라이딩 하지 않으면 자식도 추상 클래스가 되어야 한다. 만약 추상 클래스의 모든 메서드가 추상 메서..

BACK/JAVA 2024.01.30

[JAVA] 실전 자바 - 다형성(다형적 참조, 메서드 오버라이딩)

다형성 한 객체가 여러 타입의 객체로 취급될 수 있는 능력 [다형성의 핵심 이론] 다형적 참조: 하나의 변수 타입으로 다양한 자식 인스턴스를 참조할 수 있는 기능 메서드 오버라이딩: 기존 기능을 하위 타입에서 새로운 기능으로 재정의 다형적 참조 부모 타입의 변수가 자식 인스턴스 참조 가능 Parent poly = new Child(); 자식 타입인 Child를 생성했기 때문에 메모리 상에 Child, Parent 모두 생성 💡 부모는 자식을 담을 수 있다. 상속 관계는 부모 방향으로 찾아 올라갈 수 있지만 반대는 불가능하다. poly 는 Parent 타입이므로 childMethod() 를 찾을 수 없어 컴파일 오류 → 캐스팅이 필요 다형성과 캐스팅 다운캐스팅 Parent poly = new Child()..

BACK/JAVA 2024.01.30

[JAVA] 실전 자바 - 상속, super

상속 기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용하게 해 준다. 이름 그대로 기존 클래스의 속성과 기능을 그대로 물려받는 것이다. 자바는 다중 상속을 지원하지 않는다. 같은 이름의 메서드를 가진 여러 클래스를 상속 받는다면, 어떤 메서드를 선택해야 할지 모르는 문제가 있기 때문이다. 상속과 메모리 구조 new 키워드로 자식이 생성될 때 부모 인스턴스까지 포함해 인스턴스를 생성한다. (참조값은 하나지만 그 안에 두가지 클래스 정보가 공존) 참조값.메서드()를 하면 호출하는 변수의 타입(클래스)을 기준으로 메서드를 찾는다. 자식 클래스의 참조값.메서드()시 자식 클래스에 해당 메서드가 없으면 부모 클래스에서 찾아 호출한다. 계속 올라가 찾아도 없으면 컴파일 오류 상속과 메서드 오버라이딩 오버라이딩..

BACK/JAVA 2024.01.30

[JAVA] 실전 자바 - Final 키워드

Final 변수에 final 키워드가 붙으면 값을 변경할 수 없다. final 을 지역 변수에 선언 시 최초 한번만 할당할 수 있다. 매개변수에 final 선언 시 메서드 내부에서 매개변수에 값을 변경할 수 없다. //final 필드 - 생성자 초기화 public class ConstructInit { final int value; public ConstructInit(int value) { this.value = value; } } final을 필드에서 사용할 경우 필드는 생성자를 통해서 한번만 초기화 가능 //final 필드 - 필드 초기화 public class FieldInit { static final int CONST_VALUE = 10; final int value = 10; } 필드에서 초..

BACK/JAVA 2024.01.30

[JAVA] 실전 자바 - 접근 제어자

접근 제어자 private 해당 클래스 내부에서만 호출 가능 default(package-private) 같은 패키지 안에서 호출은 허용 protected 같은 패키지안에서 호출은 허용, 패키지가 달라도 상속 관계의 호출은 허용 public 모든 외부 호출을 허용 💡 private < default < protected < public 💡 생성자도 접근 제어자 관점에서 메서드와 같다. (접근 제어자 동일하게 적용) 접근 제어자 사용 - 클래스 레벨 클래스 레벨의 접근 제어자는 public, default 만 사용 가능 public 클래스는 반드시 파일명과 이름이 같아야 한다. 하나의 자바 파일에 public 클래스는 하나만 등장 가능 하나의 자바 파일에 default 클래스는 무한정 만들 수 있음 캡슐화..

BACK/JAVA 2024.01.30

[JAVA] 실전 자바 - 생성자

this 인스턴스 자신의 참조값 멤버 변수와 매개 변수의 이름이 같을 때, 매개 변수가 코드 블럭의 안쪽에 있기 때문에 더 우선순위를 가져 매개변수에 접근하게 된다. 이런 경우 멤버 변수에 접근하려면 앞에 this.를 붙인다. 생성자 이름은 클래스와 같다. 반환 타입이 없다. 객체를 생성할 때 직접 정의한 생성자가 있다면 직접 정의한 생성자를 반드시 호출해야 한다. (안하면 컴파일 에러) 여러개를 오버로딩해 정의했을 경우, 하나만 호출하면 된다. 💡 생성자를 사용하면 필수값 입력을 보장할 수 있다 생성자 호출 인스턴스를 생성하고 나서 즉시 호출된다. new 클래스이름(생성자에 맞는 인수 목록) 기본 생성자 매개변수가 없는 생성자 클래스에 생성자가 하나도 없으면 컴파일러는 자동으로 기본 생성자를 만들어준다..

BACK/JAVA 2024.01.30

[JAVA] 실전 자바 - 객체 지향 프로그래밍

객체 지향 프로그래밍 💡 객체 지향 프로그래밍은 실제 세계의 사물이나 사건을 객체로 보고 객체들 간의 상호작용을 중심으로 하는 프로그래밍 객체 지향 언어는 클래스 내부에 속성(데이터, 멤버 변수)와 기능(메서드)을 함께 포함할 수 있다. 객체는 자신의 메서드를 통해 자신의 멤버 변수에 접근할 수 있다. 캡슐화 속성과 기능을 하나로 묶어 필요한 기능을 메서드를 통해 외부로 제공하는 것 💡 객체지향 프로그램은 속성과 기능이 하나의 클래스에 묶여 캡슐화가 되어 있는 것 객체가 온전히 살아있는 느낌! 참고) 김영한 - 실전 자바 https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0..

BACK/JAVA 2024.01.30

[JAVA] 실전 자바 - 기본형과 참조형

기본형과 참조형 기본형 실제 사용하는 값을 변수로 담을 수 있다. 메서드로 기본형 데이터를 전달 하면 값이 복사되어 전달된다. 참조형 실제 객체의 위치를 저장한다. ex)객체, 배열, 클래스, String(클래스) 메서드로 참조형 데이터를 전달하면 참조값이 복사되어 전달된다. 💡 기본형은 소문자로 시작한다. 💡 기본형을 제외한 나머지는 모두 참조형이다. 💡 클래스는 대문자로 시작한다. 클래스는 모두 참조형이다. 대원칙 - 자바는 항상 변수의 값을 복사해서 대입한다. 변수 대입 기본형이면 변수에 들어 있는 실제 사용하는 값을 복사해서 대입하고, 참조형이면 변수에 들어 있는 참조값을 복사해서 대입한다. 메서드 호출 메서드 호출 시 사용하는 매개변수(파라미터)도 결국 변수다. 기본형: 메서드 내부에서 매개변수..

BACK/JAVA 2024.01.30

[JAVA] 실전 자바 - 클래스와 데이터

클래스와 객체 public class Student { String name; int age; int garde; } 클래스는 사용자 정의 타입을 만들기 위한 설계도이다. 클래스에 정의한 변수들을 멤버 변수, 또는 필드라 한다. 클래스를 사용해 실제 메모리에 만들어진 실체를 객체 또는 인스턴스라고 한다. ⇒ 클래스는 설계도이고, 이 설계도를 기반으로 실제 메모리에 만들어진 실체를 객체 또는 인스턴스라고 한다. -클래스: 객체를 생성하기 위한 설계도. 객체가 가져야할 속성(변수)와 기능(메서드)를 정의 -객체: 클래스에서 정의한 속성과 기능을 가진 실체 -인스턴스: 특정 클래스로부터 생성된 객체 (객체가 어떤 클래스에 속해있는지 강조할 때 사용) 객체 생성 Student student1 = new Stud..

BACK/JAVA 2024.01.30