독학으로 업무에 적응한다고 구현에만 집중하다보니 뭔가 깊이가 없는 개발자가 되었다고 생각이 들었다.
기본기가 탄탄한 개발자로 성장하고 싶어서 매주 10개 이상 기본 개념부터 정리하기 도전🔥
Java 개발을 위해 필요한 도구들의 집합으로 컴파일러, 디버거, 개발 도구 등을 포함한 포괄적 의미.
Java 어플리케이션을 실행하기 위한 런타임 환경을 의미.
Java의 클래스, 라이브러리, 실행환경 등을 포함하고 있음.
두 객체의 참조(메모리 주소)를 비교하는 연산자를 의미하고, 두 객체의 참조가 동일한 경우 ture를 반환한다.
eqluas는 객체한 내용적인 부분을 비교하는 메서드이다. 두 객체의 내용(값)이 동일한 경우에 ture를 반환한다.
final변수는 한번 지정이 되면 변경할 수 없는 상수를 의미한다.
final메서드는 하위 클래스에서 재정의(오버라이딩) 할 수 없음을 의미한다.
final클래스는 상속될 수 없고, 즉 확장될 수 없는 클래스를 의미한다.
oop란 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 즉, 프로그래밍을 여러 개의 객체(Object) 단위로 보고 작업한다는 의미이다.
객체(Object)란 우리 일상생활에서 인식할 수 있는 모든 사물
- 속성 = Field = 프로퍼티 : 객체가 가지고 있는 특성을 나타내는 변수
- 행위 = Method = 행위 : 객체가 수행할 수 있는 동작
하나의 메서드(Method)나 클래스(Class)가 있다고 가정할 때 이 메서드나 클래스를 다양한 방법으로 동작하게 하는 것으로 JAVA에서는 대표적으로 Java에서는 대표적으로 Overloading 과 Overriding이 있음
상위 클래스의 모든 것을 하위 클래스가 이어받는 것을 의미하며, 자식은 부모의 재산을 상속받는 것과 같다고 생각하면 된다.
- 객체의 속성(Field)과 행위(Method)를 하나로 묶고, 외부로 부터 내부를 감싸 숨기는 것을 의미한다.
- 외부의 잘못된 접근으로 값이 변하는 것을 막기 위해 클래스 내의 변수나 함수를 감추거나 드러내는 은닉성을 가지고 있고, java에서는 public, protected, default, private의 접근제어자를 통해 구현이 가능하다.
객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 의미
일반 클래스와 달리 인스턴스를 직접 생성할 수 없으며, 하나 이상의 추상 메서드를 포함할 수 있다(필수는 아님).
구현이 없이 선언만 되어 있는 메서드를 의미한다. 이를 상속받은 하위 클래스에서 반드시 구현해야 한다.
일반 클래스: 객체를 생성할 수 있다.
vs
추상 클래스: 객체를 직접 생성할 수 없다. 대신 추상 클래스를 상속받은 자식 클래스에서 객체를 생성할 수 있다.
일반 클래스: 추상 메서드를 포함할 수 없다.
vs
추상 클래스: 추상 메서드를 포함할 수 있다. 추상 메서드는 구현부가 없는 메서드다.
일반 클래스: 다른 클래스를 상속받을 수 있다.
vs
추상 클래스: 다른 클래스를 상속받을 수 있으며, 자신도 상속받을 수 있다.
일반 클래스: 실제 구현된 기능을 제공하는 데 사용된다.
vs
추상 클래스: 공통된 속성과 메서드를 정의하여 상속받는 자식 클래스에서 구현하도록 하는데 사용된다.
byte : 8bits
short : 16bits
int : 32bits
long : 64bits
float : 32bits
double : 64bits
char : 16bits
boolean : 1bit
클래스형은 기본형과 다르게 객체를 참조하는 형태이다.
class TestObject{ private int value; TestObject(int value) { this.value = value; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } } public class ClassType { public static void main(String[] args) { TestObject a = new TestObject(4); TestObject b = new TestObject(9); System.out.println(a.getValue()); //result = 4 System.out.println(a.getValue()); //result = 9 b.setIndex(6); System.out.println(a.getValue()); //result = 6 } }
인터페이스를 만들게 되면 새로운 참조 자료형을 만드는 것과 같다.
interface TestInterface<T> { void add(T value); }
배열형은 기본형으로도 만들 수 있고 참조형으로도 만들 수 있다.
public class TestArray { public static void main(String[] args) { int [] testArr1 = new int[2]; Long [] testArr2 = new Long[2]; Object[][] testArr3 = null; //중첩 괄호를 사용하게 된다면 다중 배열로 사용 } }
상수의 집합을 만들거나 특정 객체의 상태를 모아서 열거형으로 만들면 코드의 가독성을 높힐 수 있ek.
//기본 사용 public enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
//생성자와 필드 활용 public enum Day { MON("Monday"), TUE("Tuesday"), WED("Wednesday"), THU("Thursday"), FRI("Friday"), SAT("Saturday"), SUN("Sunday") ; private final String label; Day(String label) { this.label = label; } public String label() { return label; } }
컬렉션은 데이터의 집합, 그룹을 의미하며, JCF는 이러한 데이터, 자료구조인 컬렌션과 이를 구현하는 클래스를 정의하는 인터페이스 제공한다.
배열은 크기가 고정되어 있어 추가/삭제가 어려운 반면, 컬렉션은 크기가 가변적이어서 동적으로 데이터를 추가/삭제할 수 있음
배열은 동일한 데이터 타입의 데이터만 저장할 수 있지만, 컬렉션은 다양한 데이터 타입의 데이터를 저장할 수 있음
배열은 메모리 관리를 직접 해야 하지만, 컬렉션은 메모리 관리가 자동화되어 있음
배열은 인덱스 기반의 데이터 접근만 가능하지만, 컬렉션은 인덱스 기반 외에도 다양한 구현체(List, Set, Map 등)를 통해 데이터를 관리할 수 있음
List, Set , Map 는 컬렉션 인터페이스의 세 가지 주요 구현 유형이다.
구현 클래스
- HashSet : 가장빠른 임의 접근 속도, 순서를 예측할 수 없음
- TreeSet : 정렬방법을 지정할 수 있음
는 순서가 있는 객체들의 모음으로, 중복된 값을 허용한다.
구현 클래스
- LinkedList : 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 유용
- Vector : 과거에 대용량 처리를 위해 사용했으며, 비교적 성능이 별로
- ArrayList : 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어남
은 키와 값의 쌍으로 이루어진 객체들의 모음으로 각 키는 고유해야 하며, 키를 통해 값을 조회하거나 수정할 수 있다.
구현 클래스 :
- Hashtable : HashMap보다는 느리지만 동기화 지원, null불가
- HashMap : 중복과 순서가 허용되지 않으며 null값이 올 수 있다.
- TreeMap : 정렬된 순서대로 키(Key)와 값(Value)을 저장하여 검색이 빠름