자바 공부하면서 모르는 부분만 정리해보기..클래스 외부에서 클래스의 멤버변수, 메서드, 생성자 사용할 수 있는지 여부접근제어 지시자private: 클래스내부만 접근가능. 상속이고 패키지고 다 안되.default: 패키지가 기준이다. 같은 패키지 내부에서 가능. 상속관계
필요한 정보와 기능만 외부에 오픈하기대부분의 멤버 변수와 메서드들을 감추고 필요한 기능만 함수로 제공하기
생성자에서 다른 생성자 함수 호출시 주의사항public Person(){ //이곳에 다른 기능 넣으면 안됨 this(123);// 이 생성자 호출이 끝나야 객체가 생성된다}public Person(int value){ this.value = value;}
클래스간 협력 연습 문제 풀기
연습문제 구현하였다
참조변수복사하면 얕은 복사가 된다는점 주의할것copylibrary 배열의 참조변수들에 new로 각각 할당해줘야 깊은 복사가 된다
특이한 점은 행의 길이가 다르게 할당해서 사용할 수 있다.
연습문제 풀어보기ArrayList 에 익숙해지기 위해 풀어봤다
자바는 단일 상속까지만 가능하다재사용, 기능확장부모 일반적 기능자녀 구체적인 기능
모든 메서드가 추상 메서드가 된다 public abstract명시하지 않아도 추상 메서드가 된다모든 변수는 상수로 선언된다 public static final명시하지 않아도 상수로 선언된다인터페이스를 구현한 클래스는 인터페이스 형으로 선언한후 변수로 형 변환 할 수 있
DataType(자료형): 숫자, 문자변수나 상수는 자료형 먼전 선언해야함Variable(변수): 프로그램 실행되는 동안 값을 저장. 변경가능Constant(상수): 한번 저장된 값을 변경할 수 없다Literal(리터럴): 저장하는 값 그 자체를 의미함데이터타입Prim
Clone 하려면클래스에서 Cloneable 구현해야함Clone 함수 오버라디이딩 해야함테스트해봤는데 주소가 다르다값도 변경해봐도 하나만 변경된다깊은 복사 인듯
String str1 = new String("abc"); //힙에 올라감String str2 = "abc"; //상수풀상수풀 String pool 이라고 힙에 공간이 따로 있나보다String str3 = "abc"; //str2 와 str3는 같은 대상을 참조한다St
함수형 프로그래밍과 람다식함수 구현과 호출만으로 프로그래밍이 수행되는 방식함수형 프로그래밍은 순수함수를 구현하고 호출함으로써 외부 자료에 부수적인 영향을 주지 않도록 구현하는 방식입니다.함수 내부에서 함수 외부에 있는 변수를 사용하지 않아 외부에 영향을 주지 않는다병렬
자료의 대상고 관계없이 동일한 연산수행배열, 컬렉션 대상으로 연산 수행사용한 스트림은 재사용 안됨스트림은 사용한 자료 변경이 없다중간 연산과 최종 연산으로 구분된다최종연산이 호출되어야 중간 연산에 대한 수행이 이루어진다 따라서 중간연산에 대한 결과를 연산 중에 알 수
프로그래머가 직접 구현한 연산을 적용최종 연산으로 스트림의 요소를 소모하며 연산수행배열의 모든 요소의 합을 구하는 reduce() 구현 예reduce()함수의 두번째 요소로 전달되는 람다식에 따라 다양한 기능을 수행 할 수 있다람다식을 직접 구현하거나 람다식이 긴 경우
예외처리를 통해 프로그램 중단을 막고 정상적으로 처리가능NumberFormatException 숫자가 아닌데 숫자 연산을 하려는 경우
객체 그룹을 저장하고 핸들링하기 위한 아키텍처를 제공하는 컬렉션 프레임워크java.util 패키지에 포함모든 컬렉션 클래스는 List,Set, Map 인터페이스중 하나의 인터페이스를 구현하고 있다List순서가 있는 데이터의 집합, 데이터의 중복을 허용한다 (예) 대기자
객체지향설계 5가지 원칙단일 책임 원칙 (Single Responsiblity Principle)한 클래스는 하나의 책임만 가져야 한다.개방-폐쇄 원칙 (Open/closed principle)“소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.리스코프
Method Area: 컴파일된 바이트코드 형태의 클래스 정보, 메타데이터, 메서드 정보 등이 저장그리고 정적 변수가 저장되는 영역Native Method Stack: 네이티브 메서드 정보가 저장됩니다.네이티브 메서드(Native Method)는 자바 외의 언어, 주로
프로그램 로딩자바 소스 코드(.java 파일)는 자바 컴파일러에 의해 바이트코드(.class 파일)로 변환됩니다.이 바이트코드는 파일 시스템이나 네트워크 등에서 JVM으로 로드됩니다.클래스 로더(Class Loader)JVM의 클래스 로더는 필요한 .class 파일을
가비지 컬렉터(Garbage Collector, GC)는 자바 가상 머신(JVM)의 일부로, 동적으로 할당된 메모리 영역 중에서 더 이상 사용되지 않는 메모리를 자동으로 회수하는 역할을 합니다. 이 과정을 통해 개발자는 메모리 관리에 대한 부담을 크게 줄일 수 있으며,
OOM(Out of Memory)은 시스템이 더 이상 메모리를 할당할 수 없을 때 발생하는 오류나 상태를 의미합니다. 이는 일반적으로 두 가지 주요 상황에서 발생할 수 있습니다:힙 메모리 부족자바에서 가장 일반적으로 발생하는 OOM 유형입니다.객체를 생성할 때 충분한
자바에서 스레드(thread)는 프로그램 내에서 실행되는 독립적인 실행 흐름입니다. 여러 스레드가 동시에 실행되면, 여러 작업을 병렬로 처리할 수 있습니다. 자바는 java.lang.Thread 클래스와 java.lang.Runnable 인터페이스를 통해 스레드를 지원
int 와 Integer 구분한 이유가 뭘까요?int기본형은 객체가 아니며, 오직 값을 저장하기 위한 메모리만을 사용Integer객체이므로 null 값을 가질 수 있다바의 컬렉션 프레임워크 (예: ArrayList, HashMap)는 객체만을 저장할 수 있다. 따라서
함수형 프로그래밍 패러다임을 지원하므로, 순수 함수와 불변성의 개념을 활용할 수 있다중간 연산과 최종 연산을 구분합니다. 중간 연산은 데이터를 변환하고, 최종 연산은 변환된 데이터에 작업을 수행합니다. 이렇게 함으로써 여러 연산을 효율적으로 체이닝할 수 있습니다.str
두 비트 값이 다를 때만 1을 반환하기: XOR 연산은 두 입력 비트 값이 다를 때만 1을 반환하므로, 두 값을 비교하여 다른 부분을 확인하는 데 유용합니다.암호화와 복호화: XOR 연산은 동일한 키를 사용하여 암호화와 복호화를 수행할 수 있기 때문에 간단한 암호화 방
제네릭 사용의 주요 이유는 다음과 같습니다:타입 안정성: 제네릭을 사용하면 컴파일 타임에 타입 체크를 할 수 있으므로, 런타임에 발생할 수 있는 클래스 캐스팅 오류를 줄일 수 있습니다.형변환 제거: 제네릭을 사용하면 코드 내에서 불필요한 형변환을 제거할 수 있습니다.
네, 쓰레드를 사용하면 여러 작업을 동시에 수행할 수 있지만, 여러 쓰레드가 동시에 자원에 접근하려고 할 때 다양한 문제가 발생할 수 있습니다. 주요 문제점과 해결 방법은 다음과 같습니다:경쟁 조건 (Race Condition): 두 개 이상의 쓰레드가 동시에 데이터를
산술연산자: 더하기: 빼기: 곱하기/ : 나누기% : 나머지논리연산자&& : 논리곱 (AND)|| : 논리합 (OR)! : 논리부정 (NOT)비교 연산자(>, <, >=, <=, ==, !=)
public:해당 멤버는 어떤 클래스에서도 접근이 가능합니다.일반적으로 메소드나 변수를 외부에서 자유롭게 사용하게 하고 싶을 때 사용됩니다.private:해당 멤버는 오직 그 멤버를 포함하는 클래스 내부에서만 접근이 가능합니다.클래스의 내부 동작 방식을 숨기고 싶을 때
Java의 Stream에서 익명 객체를 사용할 때 주의해야 할 사항들은 다음과 같습니다:상태 변경 주의:익명 객체 내에서 외부 변수를 수정하려고 할 때 주의가 필요합니다. Stream 연산은 병렬 처리될 수 있기 때문에 상태 변경이 예상대로 동작하지 않을 수 있습니다.
추상 클래스와 인터페이스는 Java에서 객체 지향 프로그래밍의 핵심 개념으로, 다중 상속의 문제를 해결하고 코드의 재사용성을 높이는 데 사용됩니다. 두 개념의 주요 차이점은 다음과 같습니다:상속:추상 클래스: 하나의 클래스만 추상 클래스를 상속받을 수 있습니다 (단일