본문 바로가기

java

[Java] 다이아몬드 상속 개요클래스는 단 하나의 클래스만 상속받을 수 있다. 왜 그럴까? 그 이유는 바로 다이아몬드 상속 때문이다. 다이아몬드 상속객체지향 프로그래밍(OOP)에서 다중 상속을 사용할 때 발생할 수 있는 모호성 문제(ambiguity problem)를 설명하는 용어이다. 다음 클래스 다이어 그램을 통해 설명하였다.Car와 Airplane Class가 각각 Vehicle을 상속받는다.FlyCar는 Car와 AirPlane Class를 상속받는다.이렇게 되면 FlyCar는 Vehicle의 move() 메서드를 두 번 상속받게 될 가능성이 있고, 이로 인해 모호성(ambiguity)이나 중복된 맴버의 문제가 발생한다. 어떤 모호성인가?FlyCar 객체에서 Vehicle의 move() 메서드를 호출하면, FlyCa.. 더보기
[Java] toString() toSting()객체(Object) 정보를 문자열(String)로 반환할 때 사용하는 메서드이다.Object 클래스에 toString() 메서드가 기본적으로 정의되어 있다.모든 클래스는 Object 클래스를 상속받으므로, toString() 메서드를 사용할 수 있다.public class Person { // extends Object 생략 String name; public Person(String name) { this.name = name; } @Override public String toString() { return "Person name: " + name; }} toString() 특징1. 객체의 정보를 확인할 수 있다.Objec.. 더보기
[Java] Lv_2 계산기 프로젝트 요구사항사칙연산을 수행 후, 결과값 반환 메서드 구현 & 연산 결과를 저장하는 컬렉션 타입 필드를 가진 Calculator 클래스를 생성 ⬜ 사칙연산을 수행한 후, 결과값을 반환하는 메서드 구현 ✅⬜ 연산 결과를 저장하는 컬렉션 타입 필드를 가진 Calculator 클래스를 생성 ✅⬜ 1) 양의 정수 2개(0 포함)와 연산 기호를 매개변수로 받아 사칙연산(➕,➖,✖️,➗) 기능을 수행한 후 2) 결과 값을 반환하는 메서드와 연산 결과를 저장하는 컬렉션 타입 필드를 가진 Calculator 클래스를 생성합니다. ✅Lv 1에서 구현한 App 클래스의 main 메서드에 Calculator 클래스가 활용될 수 있도록 수정⬜ 연산 수행 역할은 Calculator 클래스가 담당 ✅⬜ 연산 결과는 Calculato.. 더보기
[Java] Lv_1 계산기 프로젝트 요구 사항⬜ 양의 정수(0 포함)를 입력받기 ⬜ Scanner를 사용하여 양의 정수 2개(0 포함)를 전달 받을 수 있습니다. ⬜ 양의 정수는 각각 하나씩 전달 받습니다. ⬜ 양의 정수는 적합한 타입으로 선언한 변수에 저장합니다. ⬜ 사칙연산 기호(➕,➖,✖️,➗)를 입력받기 ⬜ Scanner를 사용하여 사칙연산 기호를 전달 받을 수 있습니다. ⬜ 사칙연산 기호를 적합한 타입으로 선언한 변수에 저장합니다. (charAt(0)) ⬜ 위에서 입력받은 양의 정수 2개와 사칙연산 기호를 사용하여 연산을 진행한 후 결과값을 출력하기 ⬜ 키워드 : if switch ⬜ 사칙연산 기호에 맞는 연산자를 사용하여 연산을 진행합니다. ⬜ 연산 기호를 구분하기 위해 제어문을 사용합니다. (예를 들면 if, switch.. 더보기
[Java] 스트림(Stream) Stream(Stream)데이터를 효율적이고 선언적으로 처리할 수 있게 해주는 API이다. 컬렉션(List, Set 등)의 데이터를 필터링, 매핑, 정렬 등의 작업을 함수형 프로그래밍(순수 함수를 조합하고 소프트웨어를 만드는 방식) 스타일로 처리할 수 있게 도와준다. 쉽게 말해서, 데이터를 효율적으로 흐름에 맞추어 처리한다는 의미이다. 스트림의 특징스트림은 데이터를 저장하지 않는다.원본 데이터를 변경하지 않는다. (불변성 유지)스트림은 컬렉션(List, Set 등)과 함께 자주 활용된다.생성 → 중간 연산(Intermediate Operation) → 최종 연산(Terminal Operation) 순으로 처리 된다. (선언형 스타일)지연 연산(Lazy Evaluation)을 사용하여 최종 연산이 수행될.. 더보기
[Java] 익명 클래스란? 익명 클래스이름이 없는 클래스를 익명 클래스라고 한다. 보통 일회성으로 사용되는 클래스를 정의할 때 사용되며, 별도의 클래스 파일을 만들지 않고 즉석에 인스턴스를 생성할 때 주로 사용된다. 익명 클래스 활용클래스 이름을 따로 만들 필요 없이 일시적으로 클래스 구현이 필요한 경우이벤트 처리, 콜백, 스레드 구현 등 간단한 작업에 자주 사용된다. 문법 구조public interface Runnable() { public void run();}Runnable myRunnable = new Runnable() { // 추상 클래스 or 인터페이스 @Override public void run() { System.out.println("달린다.); };};인터페이스는 추상.. 더보기
[Java] 람다(Lamda) 람다(Lamda)익명 클래스를 간단하게 표현하는 방식이다. 즉, 익명 클래스의 메서드를 코드 블록으로 만들어서 변수에 넘기거나 인자로 전달 할 수 있게 해주는 기능이다. 람다 문법Calculator c = (a, b) -> a + b; // 람다식Calculator c1 = new Calculator() { // 익명 클래스 @Override public int sum(int a, int b) { return a + b; }};익명 클래스를 사용할 때보다 훨씬 간결하게 표현할 수 있다.컴파일러가 람다 표현식을 통해 익명 클래스를 내부적으로 만들어 준다. 조건 : 함수형 인터페이스 (자바에서 권장)@FunctionalInterfacepublic interface Ca.. 더보기
[Java] 오버라이딩(overriding)이란? 오버라이딩(overriding)객체 지향 프로그래밍(OOP)에서 자식 클래스가 부모 클래스의 메서드를 재정의하는 것을 의미한다. 오버라이딩 방법오버라이딩할 메서드의 이름과 매개변수 동일해야 한다. 부모 클래스의 기능을 바꾸거나 더 확장할 수 있다.다형성(polymorphism)을 구현할 때 자주 사용된다. 사용 예제 더보기Mainpackage practice;public class Main { public static void main(String[] args) { System.out.println("--강아지--"); Dog dog = new Dog(); dog.move(); dog.speak(); System.out.prin.. 더보기