Java 44

[Java] Upcasting (업캐스팅)

상속 관계에 있는 부모와 자식 클래스 간에는 서로 간의 형변환이 가능하다. 업캐스팅은 자식 클래스가 부모 클래스로 형변환하는 것을 말한다.이 때, 자식 클래스는 부모 클래스에 있는 멤버에만 접근이 가능하다. (업캐스팅 멤버 제한)또한 명시적 캐스팅(Explicit Casting)이 아닌 묵시적 캐스팅(Implicit Casting)이 가능하다.(반대로 다운캐스팅은 명시적 캐스팅을 해줘야하고 보통 업캐스팅한 자식 클래스를 복구할 때 쓰인다.) 예) List의 메소드만 쓰고 싶을 경우List array_List = new ArrayList(); ※ 업캐스팅을 해둬 자식 클래스에서 오버라이딩 된 메서드는 자식 클래스의 메서드로 실행된다.  공통적으로 할 수 있는 부분을 묶어서 관리할 때 쓰인다.상속 관계에서 ..

Java 2024.10.31

[Java] Stream

Java 8에 추가된 Stream을 쓰면,람다식 표기법을 활용해서 코드를 함축적으로 표현할 수 있고 병렬처리도 가능하게 된다.추가로 stream을 사용해 코드를 함축적으로 작성하게 되면,코드의 변수 등이 외부에 노출되지 않아 도중에 변수에 다른 값이 대입되는 등의 외부 노출 부작용(Side Effect)를 방지할 수도 있게 된다. Stream은 배열 Array 타입이나 Collection 인터페이스의 List나 Set 타입에도 쓸 수 있다. 다음은 Array와 List의 stream 메소드를 활용한 예이다.import java.util.Arrays;// 필터 filter// 누적계산 reduceInteger sum1 = Arrays.stream(num).filter((a) -> a%2 == 0).redu..

Java 2024.10.23

[Java] Java의 인터페이스

1. @FunctionalInterface사용자 정의 인터페이스@FunctionalInterfaceinterface Plus { void plus(int a, int b, int c);}Plus pl = (a, b, c) -> System.out.println("1. FuctionalInterface: " + (a + b + c)); pl.plus(1, 2, 3); 인터페이스를 사용해서 람다 객체를 생성할 때 인터페이스를 직접 정의하지 않고도,자바에서 제공하는 인터페이스를 사용해서 람다 객체를 생성할 수 있다. 2. Consumer : 리턴값이 없는 accept() 메서드Consumer consumer = (t) -> System.out.println(t);consumer.accept("2. Hello..

Java 2024.10.22

[Java] Set 인터페이스와 Map 인터페이스

Set 인터페이스중복불가HashSet Classadd(x)size()remove(x) contains(x) - hash 내부에 있는지 확인iterator() - 요소 순차 접근메소드: add, size, remove, contains, iterator입력순대로 순서가 유지되지 않는다.해시 코드로 저장해서 검색 속도가 빠름.정렬해서 반환해준다.LinkedHashSet메소드 위와 동일입력순대로 순서가 유지된다.해시 코드로 저장해서 검색 속도가 빠름. ------------------------------------------------------------------------------------------------------------------ Map 인터페이스키와 값으로 연관 배열을 생성키를 해시 ..

Java 2024.10.21

[Java] Link 인터페이스를 구현한 ArrayList와 LinkedList

List ← 인덱스 기반인 배열의 오버헤드 발생 문제점을 해결 (인터페이스)중복허용가변적 크기입력된 순서대로 저장코드에서 list를 구현한 클래스명만을 바꾸기만 하면 프로그램의 자료구조를 바꿀 수 있음. ArrayList ← List를 구현한 클래스LinkedList ← 다른 알고리즘으로 List를 구현한 크래스순차적인 처리에 빠른 속도 제공인덱스를 이용한 요소 접근ArrayList array_List = new ArrayList();ArrayList 클래스의 메소드와 멤버변수를 쓸 수 있음List array_List = new ArrayList();List의 메소드만 쓰고 싶을 경우ArrayList의 메소드add(x)size()indexOf(idx) // 인덱스가 있으면 인덱스 값을 반환, 없으면 -1..

Java 2024.10.21

[Java] 실수 float, double

자바에서는 실수형을 다룰 때 부동 소수점 방식을 사용하기 때문에 float a = 0f; 또는 double b = 0; 을 하면변수 a, b가 정확한 0이 되지 않는다. 때문에 0.0 또는 0.0f로 나누게 되면 결과는 무한대(Infinity) 또는 NaN(Not a Number)이 된다.3 / 0.0 // 무한대(Infinity)5 % 0.0 // NaN 위의 결과에서 계속 연산을 하더라도 무한대는 무한대, NaN은 계속 NaN이 되기 때문에나눗셈 연산을 할 때에는,나눗셈 연산의 결과가 무한대 혹은 NaN이 되는지 먼저 확인하고 연산을 계속해 나아가는 것이 좋다.이를 확인하기 위한 함수가 Double.isInfinite()와 Double.isNaN()이다.double a = 4 / 0.0doub..

Java 2024.10.18

[Java] 입력

자바에서 입력을 받기 위해서 쓰는 클래스가 바로 Scanner이다. Scanner를 통해 입력을 받기위해서는 Scanner의 객체를 일단 생성해 주어야 한다.그리고 그 객체를 통해 변수에 입력값을 대입하는 것이다.다음과 같은 코드로 입력받으면 된다.import java.util.Scanner;Scanner scanner = new Scanner(System.in);// 입력된 값을 변수 input에 대입String input = scanner.nextLine();...함수 끝// Scanner객체 꼭 닫아주기!! (자원 낭비 방지!)scanner.close(); 여기서 꼭 좋은 습관을 들여줘야하는데코드가 끝나서 입력이 필요없을 때 꼭 " scanner.close(); "의 한 줄을 마지막 줄에 추가해주어..

Java 2024.10.18

[Java] 변수

변수의 범위(= 변수의 수명, 가시성)에 따라인스턴스 변수 (=객체 변수)  -- 클래스 정의에서 선언정적 변수 (= 클래스 변수) -- 클래스 정의에서 static 키워드와 함께 선언 (프로그램과 동시에 메모리에 생성되고 프로그램이 종료되면 함께 사라짐) 로컬 변수 (지역변수) -- 메서드 및 if 등의 블록 내에서 선언 ( 인스턴스 변수나 정적변수가 아니면 전부 로컬 변수)      ** 정적 변수나 정적 메소드는 static 메모리 영역에 존재해서 객체가 생성되기 전에 이미 할당되어 있기 때문에 여러 객체가 해당 메모리를 공유하고 객체의 생성 없이 바로 사용할 수 있다.( 일반적으로 static 변수는 public 및 final과 함께 사용되어 public static final로 활용된다.)

Java 2024.10.14

[Java] 오버플로, 언더플로, BigInteger

오버플로우(Overflow), 언더플로우(Underflow)가 발생해도 오류가 나지 않고 실행이 되기 때문에아주 큰 숫자나 아주 작은 음수를 다룰 때 주의 깊게 처리해야한다!!!---> BigInteger를 사용하는 방법도 있다.package basic.type;import java.math.BigInteger; // 큰 숫자를 다루기 위한 확장형 BigIntegerpublic class TypeEx02 { public static void main(String[] args) { int c =1234; long d = 123456; // 123456L : 자동형식변환 // 오버플로, 언더플로 System.out.println(Long.MAX_VALUE); // 9223372036..

Java 2024.09.24

[Java] 자바의 메모리 구조

메모리에 올릴 수 있는 것     →  숫자(정수, 실수) , 논리(true, false) , 문자 3가지뿐!!---------------------------------------------------------------------------------------------------------------------------스택- 기본형 (숫자, 문자, 논리형)이 저장됨- 힙 영역에 생선된 객체들을 참조하는 주소값이 할당됨 힙- 인스턴스 변수(객체)가 저장됨- new 연산자로 생성된 객체가 저장됨 Method(Static) 영역- 상수 풀... 전역변수와 정적 멤버변수가 저장됨

Java 2024.09.24