Tech Stack/Java

Tech Stack/Java

[Java]String과 Hashcode()

String s1 = "하하"; String s2 = "하"; s2 += "하"; System.out.println(s1.hashCode()); // 출력 결과 : 1747712 System.out.println(s2.hashCode()); // 출력 결과 : 1747712 System.out.println(s1 == s2); // 출력 결과 : false(?) 자바에서는 String을 많이 쓰는데 보다 효율적으로 메모리를 쓰기 위해서 String Constant Pool을 만들었다. → 재사용이 가능 s1의 경우 String 리터럴로 생성되어 힙 영역에 String Constant Pool에 들어간다. String의 불변성 때문에 s2의 경우 "하"가 더해지면서 뒤에 이어서 붙이는 게 아니라 새로운 객..

Tech Stack/Java

[Java]ArrayList와 HashMap

ArrayList Collection 프레임워크의 일부 List 인터페이스를 상속 받아 사용 → List list = new ArrayList(); 가능한 이유 표준 배열보다 느리지만 많은 조작이 필요한 경우 유용하게 사용 객체가 추가되어 용량을 초과하면 자동으로 부족한 크기만큼 용량이 늘어남(마법의 장바구니) 출처 : https://crazykim2.tistory.com/558 Array(배열) vs ArrayList(리스트) 배열 ArrayList 크기 고정(늘릴 수 없음) 동적(가변적으로 늘어남) 넣을 수 있는 것 기본형, 객체 객체 제네릭 사용 여부 불가능 가능 길이 length 변수 size() 메소드 데이터 추가 arr[0] = 1; 할당 연산자 필요 정해진 크기 안에서 인덱스를 고려 list..

Tech Stack/Java

[Java]스트림(Stream) API

스트림(Stream) API 스트림 API의 등장 배경 더보기 자바에서는 많은 양의 데이터를 저장하기 위해 배열이나 컬렉션을 사용 → 접근하기 위해서는 반복문이나 반복자(iterator)를 사용하여 매번 새로운 코드를 작성 → 작성된 코드의 길이가 너무 길고 가독성이 떨어지며, 재사용이 거의 불가능 → 이러한 문제점을 극복하기 위해서 Java SE 8부터 스트림(stream) API 도입 · 자바 8부터 지원되기 시작한 람다를 활용할 수 있는 기술 중 하나 · 프로그램과 입출력 장치 사이의 매개자 역할을 하는 스트림과는 전혀 다른 개념 · 다양한 데이터들을 읽고 쓰기 위한 공통된 방법 제공 · 내부 반복(internal iteration)을 통해 작업 수행 ↔ 컬렉션 : 외부 반복 · 원본 데이터를 변경..

Tech Stack/Java

[Java]객체지향에서 다형성이란?

보호되어 있는 글입니다.

Tech Stack/Java

[Java]싱글톤(Singleton)?

싱글톤(Singleton) 하나의 객체만 생성하도록 보장해주며 getInstance() 메서드를 통해서만 다른 클래스에서 객체에 접근할 수 있도록 해주는 클래스 싱글톤 패턴은 생성 패턴 중 하나로 객체를 오직 하나만 생성하여 생성된 객체를 프로그램 어디에서나 접근하여 사용할 수 있도록 하는 패턴이다. 싱글톤 패턴을 왜? 정수기 예시가 정말 쉬운 이해를 돕는 것 같다. 회사 내에 정수기가 한 대 있다고 가정하면, 누가 물을 마시던 그 정수기의 물의 양이 줄어야 한다. 여러 클래스에서 이 정수기 클래스에 생성자를 호출할 때, 그 때마다 객체를 생성한다면 이후 정수기의 물의 양을 제대로 측정할 수 있는가? 싱글톤 패턴을 구현하는 데에는 여러가지 방법이 있지만, 그 중 기본적인 방법으로 예시를 구현하였다. · ..

Tech Stack/Java

[Java]Scanner와 BufferedReader의 차이

보호되어 있는 글입니다.

Tech Stack/Java

[Java]static에 대한 정리

static이란? static(정적)은 고정된이라는 의미를 가지고 있다. static이라는 키워드를 사용하여 static 변수와 static 메서드를 만들 수 있는데 이를 정적 필드와 정적 메서드라고도 하며, 둘을 합쳐 정적 멤버(클래스 멤버)라고 한다. 이렇게 만들어진 정적 변수나 정적 메서드는 프로그램이 종료되기 전까지 사용이 가능하고, GC(Garbage Collection)에 의해 수집되지 않는다. 참고로, 정적 객체는 GC에 의해 수집될 수 있다. 이 정적 필드와 정적 메서드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버이다. ∴ 클래스 로더가 클래스를 로딩해서 메서드 메모리 영역에 적재할 때 클래스 별로 관리가 된다. → 클래스의 로딩이 끝나는 즉시 바로 사용이 가능 * 가비지..

Tech Stack/Java

[Java]추상클래스 vs 인터페이스

자바에는 추상화를 구현하기 위해서 추상클래스와 인터페이스 두 가지 기능이 존재한다. 추상 클래스가 미완성 설계도라면 인터페이스는 기본 설계도라 할 수 있다. 추상 클래스는 트리 형식으로 상위 클래스와 하위 클래스로 나뉘어지는 구조이고, 하위 클래스는 상위 클래스에서 추상화시킨 생성자 혹은 메서드를 정의하면서 더 구체화되어간다. 반면에, 인터페이스는 트리 구조와 같은 수직적 구조가 아닌 수평적 구조를 가진다. 추상 클래스의 경우 클래스 명 앞에 abstract 키워드를 붙이고, 추상 메서드뿐만 아니라 생성자, 필드, 일반 메서드도 포함할 수 있다. 일반 클래스와 크게 다르지 않기 때문에 extends 키워드를 사용하여 상속 받는다. 인터페이스의 경우 앞에 interface 키워드를 사용하여 구현하고, 오로..

Tech Stack/Java

[Error]이클립스 한글 깨짐 현상

보호되어 있는 글입니다.

Tech Stack/Java

[Java]추상화에 대한 정리

추상화(Abstraction) 필요한 부분, 중요한 부분을 통합하여 하나로 만드는 것 객체 지향 관점에서의 추상화는 공통된 특징을 묶어 하나의 클래스로 정의하는 것을 말한다. 추상 클래스의 예제를 보면 추상화를 하는 이유에 대해서 쉽게 이해할 수 있다. 추상 클래스 예제 먼저 아래는 추상화를 하지 않고 단순히 차와 버스 클래스를 만든 예제이다. 대충 봐도 중복된 코드가 많은 것을 볼 수 있다. class Car{ String name; Car(String name){ this.name = name; } void accel_pedal() { System.out.println(name + "야 달려라"); } void break_pedal() { System.out.println(name + "야 멈춰라")..

97Arty
'Tech Stack/Java' 카테고리의 글 목록