TIL/JAVA 13

[TIL] DI(의존성 주입)와 IoC(제어의 역전)

'의존성 주입' 이란? - (DI: Dependency Injection) 의존성 주입(DI)이란 어떤 한 객체가 의존 관계인 다른 객체를 외부로부터 주입받는 것이다. 즉, 객체가 자신이 의존하고 있는 객체를 직접 생성하지 않고, 외부로부터 주입 받음으로써 객체간의 결합도를 낮추고 유연성을 높이는 방법이다. 아래 예시를 보며 좀 더 정리해보자. 여기 Car라는 객체가 있다. Car의 생성자를 보면 Engine이라는 객체를 필요로하고 있다. 따라서 현재 Car와 Engine은 의존 관계이다.(여기서 Engine은 인터페이스다)public class Car { ... public Car(Engine engine) { this.engine = engine; } ...} 하지만 C..

TIL/JAVA 2024.11.29

[TIL] Stream을 사용하는 이유, 특징

Stream을 왜 사용할까? Stream은 다양한 데이터 소스를 표준화된 방법으로 다루기 위해 사용한다. '표준화' 라고 하면 '컬렉션 프레임워크'가 떠오를 수 있다.컬렉션 프레임워크란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스 집합이다.컬렉션 프레임워크에는 List, Set, Map 인터페이스가 존재하는데 List와 Set은 Collection 인터페이스를 상속받지만, Map 인터페이스는 별도로 정의된다. List, Set과 Map의 인터페이스가 다르니 사용방법도 다르다. 결국 컬렉션 프레임워크의 표준화는 다소 아쉬운점이 있다.이때 등장한 것이 바로 Stream이다. (JDK 1.8에 등장) 덕분에 우리는 다양한 데이터 소스(컬렉션, 배열)를 Stream 형태로 만..

TIL/JAVA 2024.11.28

[TIL] 람다식 (with. 익명 클래스, 익명 함수)

'람다식' 이란? (feat. 익명함수) 자바 8에서 도입된 기능으로 간결하게 익명 함수를 표현할 수 있는 방법.익명함수는 이름이 없는 함수이다. 주로 일회성으로 사용된다. 람다식은 익명 함수의 한 형태로 볼 수 있다. 람다식은 함수형 인터페이스의 경우에만 사용이 가능하다.따라서 추상 메서드가 두 개 이상인 추상 클래스의 경우 람다식을 사용할 수 없고, 이때는 익명 클래스를 사용해야한다.  람다식 문법 [기본 형식]/*기본 형식 1*/(parameters) -> expression/*기본 형식 2*/(parameters) -> { statements; }expression, statements가 뭐지? 🤔[expression]• 숫자, 문자열, 변수, 연산자를 이용해 값을 생성하는 코드조각 (= 식)i..

TIL/JAVA 2024.11.27

[TIL] Comparator와 Comparable

1. Comparable• 기본 정렬 순서를 정의할 때 사용• package: java.lang• Comparable 인터페이스 내부에 int compareTo() 메서드가 정의되어있음• 클래스에 implements 해서 구현, 객체의 기본 정렬 방법을 정의 • 여러 가지 정렬 기준을 정하기는 어려움import java.util.*;class Student implements Comparable { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } @Override public int compare..

TIL/JAVA 2024.11.25

[TIL] 생긴게 똑같으면 같은거 아닌가요?🤔 (동일성 vs 동등성)

코딩을 하다보면 무언가 서로 비교할 일이 많다. '문자열은 .equals()로 비교하세요.'라고 들어와서 지금까지 문자열을 그렇게 비교해왔는데,정작 '왜 ==은 쓰지 않는 것인지', '==과 .equals()의 차이는 무엇인지' 깊이 있게 공부하지는 못한 것 같다. 예전에 ==과 .equals() 에대해 노션에 정리한적이 있는데, 동등성과 동일성에 대해 알게된 지금 다시보니 너무 간략하게 정리한 느낌..! (나 좀 성장 했나..?🥹)https://www.notion.so/String-equals-vs-129589af8800804c8a5dc92441b5f701?pvs=4 지금부터 동등성과 동일성에 대해 정리하면서 ==과 .equals()의 차이에 대해 더 심도있게 알아보자! ✨[ 동일성 VS 동등성 ]동..

TIL/JAVA 2024.11.21

[TIL] Getter와 Setter를 사용하는 이유를 항상 고민하자

오늘은 계산기 만들기 과제 Lv2를 구현했다.과제 안에 Getter, Setter를 활용할 것을 요구하는 내용이 있었다.  Getter와 Setter를 만드는 법은 아니까 배운대로 척척 만들었는데, 완성 된 코드를 보는 순간 '내가 만든 Getter, Setter가 무슨 의미가 있는거지?...'라는 의문이 들었다. 아래는 내가 초기에 만든 Getter, Setter다.private Deque ansList=new LinkedList();public Deque getAnsList(){ return ansList;}public void setAnsList(Deque ansList){ this.ansList=ansList;}코드를 보면 알겠지만, '안에 있는 내용 어차피 다 보여주고, 다 바꿀 수 ..

TIL/JAVA 2024.11.14

[TIL] 캡슐화와 Getter, Setter(JAVA)

오늘은 JAVA 강의를 들으면서 이전에 배운 내용들을 복습해보는 시간을 가졌다.자잘하게 새로 알게 된 내용이 많았는데, 그중 '캡슐화'와 'Getter', 'Setter'에 대한 내용이 인상 깊어서 간단하게 정리해보려한다.🟡 캡슐화가 뭘까?'캡슐화'란 클래스 내부에 선언된 데이터를 접근제어자를 통해 접근을 제한함으로서 함부로 변경할 수 없도록  보호하는 것이다.'객체의 무결성'을 유지하기 위해서, 우리는 필드에 private, default 등의 접근제어자를 사용해 외부의 접근을 막는다.* '객체의 무결성'이란 객체가 변하지 않고 일관된 상태를 유지하고, 또 외부로부터 보호되고 신뢰할 수 있음을 의미한다. 캡슐화에 대해 배우면 이런 의문이 들 수 있다."데이터를 외부로부터 보호하는건 좋은데, 만든 사람..

TIL/JAVA 2024.11.13

[TIL] JAVA에서 0.1을 100번 더하면 왜 10이 아닐까? (JAVA)

오늘 프로그래밍 1주차 강의를 듣는데 강사님께서 이런 질문을 던지셨다." float는 4byte만 쓰는데 어떻게 long 보다 더 넓은 범위를 표현 가능한가요? " 해답은 간단하다 정수와는 다르게 실수는 '부동소수점'을 사용하기 때문이다. 🟡 부동소수점이란? - IEEE 754 표준 기반부동소수점은 2진수를 사용해 소수를 표현한다.그중  IEEE 754 표준을 따르는 단정도 부동 소수점은 32bit로 구성되며, 구조는 아래와 같다.부호비트: 1bit지수: 8bit (바이어스 127를 사용. 지수+127해서 2진수로 변환해야함)가수(유효 숫자): 23bit  🟡 2진수로 표현할 수 없는 소수계산 방법은 따로 검색해보면 나오기도 하고, 여기서는 계산방법이 중요한게 아니기 때문에 생략하겠다.여튼 여기에서의..

TIL/JAVA 2024.11.11

[TIL] 최대공약수(GCD)와 최소공배수(LCM) 효율적으로 구하기 (JAVA)

오늘의 데일리 루틴 문제는 '최대공약수와 최소공배수'이다.https://school.programmers.co.kr/learn/courses/30/lessons/12940 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 내가 아는 최대공약수, 최소공배수 구하는 방식을 적용해서 풀어보았는데, 아무리 생각해도 좀 유치한가 싶기도하고, 분명 이것보다 더 효율적인 방법이 있을텐데..하는 찝찝한 마음을 떨쳐버릴 수가 없어서 정보를 찾아보았다. 아래는 내가 초기에 작성한 코드이다.초등학생이 최소공배수, 최대공약수 구하듯이 한땀한땀 정성스럽게 비교해가며 구한다.최소공배수는 브루트 포스를 사용했는데, 수를 하나씩 넣어..

TIL/JAVA 2024.11.08

[TIL] 왜 2차원 배열은 '열(colum)'의 개수를 명시하지 않고도 초기화가 가능할까? (JAVA)

오늘 문제 풀이를 하면서 2차원 배열을 사용할 일이 있었는데, 문득 2차원 배열이 '열'을 초기화하지 않고도 사용할 수 있는 이유가 궁금해졌다. 아직 이 의문이 완전히 해소된건 아니지만, GPT와의 열띤 토론으로 도출해낸 나만의 생각을 정리해본다.  어디까지나 추측이라 흐지부지 끝남 주의..오류 정정은 언제나 환영이다!!! 제발...일단 JAVA에서는 2차원 배열을 선언할 때, '행'의 개수만 초기화해도 된다.// 행의 개수만 지정하여 2차원 배열 선언int[][] array = new int[3][];// 각 행의 열의 개수를 개별적으로 초기화array[0] = new int[4]; // 첫 번째 행에 4개의 열 할당array[1] = new int[5]; // 두 번째 행에 5개의 열 할당array[..

TIL/JAVA 2024.11.08