
public class HelloJava 1\. Hello.java라는 파일을 만들었다고 이해.2\. 파일명과 클래스 이름 같아야 한다. 3\. {} 블록을 사용 -> 클래스의 시작, 끝 public static void main(String\[] args)1\. ma

변수 시작 package 자바 파일을 구분하기 위한 폴더 10을 20으로 변경하면 20이 출력. 변수란?값을 보관해두고, 필요할때 값을 꺼내서 읽을 수 있는 저장소 필요. 데이터를 담을 그릇을 제공하는 곳. 변수는 이름 그대로 변할 수 있다는 뜻 a의 값을 변경하려면
산술 연산자 +, -, *, / 연산자의 종류 산술 연산자 종류 - - +, -, *, /, % 증감 연산자 - ++, -- 비교 연산자 - ==, !=, >, =, 자바는 문자열인 String 타입에 다른 타입을 더하는 경우 타입을 문자열로 변경한다. ()
if (if - else)특정 조건에 따라서 코드 실행 특정 조건에 따라서 다른 코드를 실행하는 것을 조건문 조건문엔 if, switch문이 있다. If특정 조건이 참인지 확인, 조건이 참이면 특정 코드 블록을 실행 else문 사용하던 앞서 진행한 프로그램을 조금더 간
위 코드를 switch문으로 변경해보자 둘 차이점을 비교 하자면, if문은 비교 연산자를 사용 할 수 있지만, switch문은 단순히 값이 같은지만 비교 가능 조건식 결과 값이 어떤 case의 값과 일치하면 case 해당 값 실행 break는 탈출 => 없으면 case

반복문의 시작 while, do-while, for while 1조건식을 확인한다. 참이면 코드 블럭을 실행하고, 거짓이면 while문을 탈출 참일경우 코드 블럭이 끝나면 다시 조건식으로 들어가서 검사 후 조건식 실행 난이도 UP! 그림을 통해 분석do-while 조건
스코프 지금까지 정리한 내용들은 지역변수를 갖고 학습. 지역변수는 이름 그래동 특정 지역지역에서만 사용 할 수 있는 변수. 특정 지역을 벗어나면 사용 할 수 없다. 지역이 바로 변수가 선언된 코드 블록 {}. 지역변수는 자신이 선언된 코드 블록 {} 안에서만 생존, 선
형 변환1 작은 범위에서 큰 범위로는 당연히 값을 넣을 수 있다.int -> long -> double큰 범위에서 작은 범위는 문제가 발생할 수 있다 1\. 소수점 버람 2\. 오버플로우 형이 변경 되는 것을 형 변환이라고 하는데, 작은 범위 숫자 타입에서 큰 범위 숫
ScannerSystem.out을 통해 출력했듯, System.in으로 사용자 입력을 받을 수 있다. Scanner sc = new Scanner(System.in); \-> System.in을 사용해서 사용자의 입력을 편리하게 받도록 도와준다 \-> Scanner

배열시작 학생을 몇명 추가해야 한다면 변수를 선언하는 부분 & 점수를 출력 하는 부분 코드 추가 하지만 100명을 추가해야 한다면...? 끔찍하다 이런 상황을 대비해, 배열을 사용배열의 선언과 생성 배열 변수 선언int\[] students // 배열 변수 선언stud

메서드 시작 같은 연산을 두번 수행, 계산 부분이 거의 같다 계산1 , 계산2 둘다 변수를 두개 선언, 어떤 연산을 수행하는지 출력, 두 변수를 더해서 결과를 구한다.

Why we need class??자바는 객체와 클래스로 구성하나는 변수를 위주로 구성한 코드이고, 다른 하나는 배열을 위주로 구성한 code이다. 둘은 각각 한계가 있다. 변수로 짠 코드는 코드가 계속 반복적인 부분도 있고, 새로 만들어 질 때마다 게속 하나씩 만들어

기본형 VS 참조형 변수의 데이터 타입을 가장 크게 보면 기본형과 참조형으로 구분.사용하는 값을 변수에 직접 넣어 -> 기본형겍체에 저장된메모리 위치를 가르키는 참조형 기본형 -> int, long, double, boolean 처럼 변수에 사용할 값을 직접 넣을 수

절치지향 프로그래밍 -> 시작 절차 지향 프로그래밍은 이름 그대로 절차를 지향. 프로그램의 흐름을 순차적으로 따르며, 처리. 객체지향 프로그래밍 객체지향 프로그래밍은 이름 그대로 객체를 지향. 쉽게 이야기해서 객체를 중요객체지행 프로그래밍은 실제 세꼐의 사물이나 사건을

생성자 필요 객체를 생성하는 시점에 어떤 작업을 하고 싶다면 생성자를 이용 회원의 초기값을 설정하는 부분 반복 -> 제거 initMember를 통해서 반복을 제거, 그런데 이 메서드 대부분 MemberInit 객체의 멤버 변수를 사용. MemberInit이 자기 자신
패키지 시작 만약 기능이 추가되어서 프로그램이 아주 커지게 된다면?? 카테고리를 만들고 분류! 패키지 사용 패키지를 사용하는 경우 항상 첫줄 코드에 package pack과 같이 패키지 이름을 적어줌 여기서 pack 패키지에 data 클래스를 생성 이후에 Data 인스

접근 제어자 이해 자바는 public, private 같은 접근 제어자를 제공, 접근 제어자를 사용하면 해당 클래스 외부에서 트정 필드나 메서드에 접근하는 것을 허용, 제한 Speaker 객체를 사용하는 사용자는 Speaker volume 필드와 메서드에 모두 접근 가

자바 메모리 구조 메서드 영역 : 클래스 정보를 보관.스택 영역: 실제 프로그램이 실행되는 영역. 메서드를 실행할 때 마다 하나씩 쌓인다. 힙 영역 : 객체(인스턴스)가 생성되는 영역. new 명령어 사용.메서드 영역 메서드 영역은 프로그램을 실행하는 공통 데이터를 관

final 변수와 상수 1final 키워드는 끝!!! 변수에 final 키워드가 붙으면 더이상 값 변경 X final 지역 변수 final을 지역 변수에 설정할 경우 최초에 한번만 할당 가능, 변수 값 변경시 compileErrorfinal 지역 변수 선언시 초기화 한

상속 - 시작 상속관계가 왜 필요할까 ?? 상속관계 상속은 객체지향 프로그램의 핵심 요소 중 하나. 기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용하게 해준다. 이름 그래도 기존 클래스의 속성과 기능을 그대로 물려받음. 상속을 사용하려면 extends 키워드를

다형성 시작 객체지향 프로그램의 대표적 특징 -> 캡슐화, 상속, 디형성 다형성은 이름 그대로 -> 다양한 형태, 여러 형태 프로그래밍에서 다형성은 한 객체가 여러 타입으로 객체로 취급될 수 있는 능력. 보통 하나의 객체는 하나의 타입으로 고정. 다형성을 사용하면, 하

다형성 활용 1중복 되는 부분 배열을 통해 중복 제거 시도 Dog, Cat, Caw 타입이 서로 다르기 때문에 불가능반대로 이야기 하면 Dog, Cat, Caw type이 같다면 메서드와 배열을 활용해 코드의 중복 제거 가능 다형성 활용 2 코드 분석 soundAnim

Spring 기본편에서 객체지향 프로그래밍에 대해 설명한 적이 있다. 따라서 여기서는 간략하게 적겠다. 객체지향 프로그래밍은 객체들의 모임으로 파악하고자 하고, 각각의 객체는 메시지를 주고 받고, 데이터를 처리 프로그램을 유연하고 변경에 용이 역할과 구현을 분리 역할과

자바가 기본적으로 제공하는 라이브러리 중 가장 기본이 되는 것은 java.lang package java.lang 패키지 대표적 클래스 Object = 모든 자바 객체의 부모 클래스 String = 문자열 Integer, Long, Double = 래퍼 타입, 기본형

기본형 : 하나의 값을 여러 변수에서 절대로 공유 X 참조형 : 하나의 객체를 참조값을 통해 여러 변수에서 공유 기본형 변수 a 와 b는 절대로 하나의 값을 공유 X b = a 라고 하면 자바는 항상 값을 복사해서 대입 결과적으로 a와 b는 둘다 똑같은 숫자의 값을 갖

자바에서 문자를 다루는 대표적 타입은 char, String 2가지 타입이 있다. String은 클래스다. int, boolean 같은 기본형이 아니라 참조형이다. 따라서 str 변수에는 String 인스턴스 참조값만 들어갈 수 있다.문자열은 자주 사용, 따라서 편의상
자바는 객체지향 언어, 자바 안에 객체가 아닌 것이 있음. int double 같은 primitive type 기본형은 객체가 아니기 때문에 한계가 있음 객체가 아님 : 기본형 데이터는 객체가 아니기 때문에 객체 지향 프로그래밍의 장점을 살릴 수 X. \-> 객체 참

자바가 제공하는 열거형(Enum Type)을 제대로 이해하려면 먼저 열거형이 생겨난 이유를 알아야 한다.문제점 존재하지 않는 VIP 라는 등급을 입력 오타 소문자 입력 -> 등급은 다 대문자인데 소문자를 입력 등급에 문자열을 사용하는 지금의 방식은 문제가 있음 타입 안

날짜와 시간 라이브러리가 필요한 이유 날짜와 시간을 계산 하는 것은 단순하게 생각하면 쉬워보일 수 있지만 보기보다 까다로움 1. 자바 날짜와 시간 라이브러리 여갓 JDK (1.0) 문제점 타임존 처리 부족: 초기 Date 클래스는 타임 존을 제대로 처리 X 불

for문을 중첩하는 것을 중첩 for문이라고 한다.클래스 안에 클래스를 중첩해서 정의할 수 있는데 중첩 클래스라고 한다. 중첩 클래스 종류 중첩 클래스는 -> 정적, 내부 (내부, 지역, 익명)변수의 위치 -> 정적 변수, 인스턴스, 지역 중첩 클래스 위치 선언 \->

지역 클래스는 내부 클래스의 특별한 종류, 내부 클래스의 특징을 그대로 살림 지역 클래스는 지역 변수와 같이 코드 블럭 안에서 정의 지역 클래스 특징 코드 블럭 안에 클래스를 선언 지역 클래스는 지역 변수 접근 가능 지역 클래스의 접근 범위 인스턴스 변수인 value

NetworkClient : 외부 서버와 연결하고, 데이터를 전송하고, 연결을 종료하는 기능 NetworkService : NetworkClient를 사용해서 데이터를 전송 NetworkClient를 사용하려면 연결, 전송, 연결 종료와 같은 복잡한 흐름 제어 전체 흐

예외도 객체이다. 따라서 필요한 필드와 메서드를 소유 가능 오류가 발생했을때 오류 코드를 반환하는 것이 아니라 예외를 던진다. 반환값을 사용하지 않아도 됨.예외처리 덕분에 메서드가 정상 종료되면 성공, 예외가 던져지면 예외를 통해 실패를 확인 오류가 발생하면, 예외 객

배열 리스트 단점 배열 리스트는 내부에 배열을 사용해서 데이터 보관 \-> 배열의 사용하지 않는 공간 낭비 \-> 배열의 중간 데이터 추가 낭비되는 메모리 없이 딱 필요한 만큼 메모리를 확보, 앞이나 중간 데이터를 추가하거나 삭제할때 효율적 자료구조 -> Node 노드

순서가 있고 중복을 허용하는 자료구조를 리스트 MyArrayList 와 MyLinkedList 는 내부 구현만 다를 뿐 같은 기능을 제공MyArrayList를 활용해서 많은 데이터를 처리하는 BatchProcessor 클래스를 개발 중 데이터를 앞에서 추가 하거나 삭제

List요소들의 순차적 컬랙션, 특정 순서를 가지며, 같은 요소 여러번 나타날 수 있다. 순서 유지, 중복 허용 Set유일한 요소들의 컬렉션 유일성, 순서 미보장, 빠른 검색 add(value) : 셋에 값을 추가한다. 중복 데이터는 저장하지 않는다.contains(v

set은 중복을 허용 X, 순서 보장 X Set을 구현하는 방법은 단순. 인덱스가 없기 때문에 단순히 데이터를 저장, 데이터 있는지 확인, 데이터 삭제 & 중복 여부만 checkbuckets : 연결 리스트를 배열로 사용 배열안에 연결 리스트가 들어있고, 연결 리스트

셋은 중복을 허용하지 않고, 순서를 보장하지 않는 자료 구조이다구현 : 해시 자료 구조를 사용해서 요소를 저장 순서 : 요소들은 특정한 순서 없이 저장. 요소를 추가한 순서를 보장 X 시간 복잡도 : 주요 연산(추가, 삭제, 검색)은 평균적으로 O(1) 시간 복잡도를

Map은 키-값의 쌍을 저장하는 자료구조 키는 맵 내에서 유일해야 한다. 키를 통해 값을 빠르게 검색 가능 키는 중복X, 값은 중복 될 수 있음 순서 유지 XHashMap , TreeMap , LinkedHashMap 등 다양한 Map 구현체를 제공키와 값 목록 조회

자료 구조의 구현과 관계 없이 모든 자료 구조를 동일한 방법으로 순회할 수 있는 일관성 있는 방법이 있다면, 자료 구조를 사용하는 개발자 입장에서 매우 편리할 것이다.자바는 이런 문제를 해결하기 위해 Iterable 과 Iterator 인터페이스를 제공hasNext()

프로그램 2개 이상 동시에 실행 프로그램의 실행이란 프로그램을 구성하는 코드를 순서대로 CPU 연산하는 일 CPU 코어는 하나로 가정, 한번에 하나의 프로그램 코드만 실행 가능 하나의 프로그램 안에 있는 코드를 모두 실행 -> 다른 프로그램의 코드를 실행 ?? -> 답

자바 메모리 구조메서드 영역 : 메서드 영역은 프로그램을 실행한는데 공통적으로 필요한 데이터 관리 클래스 정보 : 클래스의 실행 코드, 필드, 메서드와 생성자 코드등 모든 실행 코드가 존재 static : static 변수들 보관 런타임 상수 풀 : 프로그램을 실행하

Thread 클래스는 스레드를 생성하고 관리하는 기능 Thread 클래스가 제공하는 정보 스레드 생성 스레드 생성할 때 Runnable 인터페이스의 구현체와 스레드 이름 전달 가능 Runnable 인터페이스 : 실행작업을 포함하는 인터페이스스레드 이름 : myThrea

문제점 main 스레드가 runFlag=false를 통해 작업 중단 지시. work 스레드는 즉각 반응 X 가장 큰 문제는 sleep main 스레드가 runFlag를 false로 변경해도, work 스레드는 sleep(3000)을 통해 3초간 잠들어 있다. 3초간의

runFlag을 사용해 스레드 작업 종료 boolean runFlag = true;을 사용했을때 main 스레드는 종료된 것을 확인 할 수 있지만, while 스레드는 종료되지 않을 것을 볼 수 있다. 실행되는 예상 결과는 main 스레드 종료시, task 스레드도 종

멀티 스레드 사용할때 가장 주의해야 할 점은 같은 자원에 여러 스레드가 동시에 접근할 때 발생하는 동시성 문제. 참고롤 여러 스레드가 접근하는 자원을 공유자원이라 함 t1, t2의 스레드는 withdraw()를 실행함. t1, t2 스레드는 BankAccount 인스턴
Object는 모든 부모 타입, 부모는 자식을 담을 수 있음 몇가지 문제 있음 반환 타입이 맞지 않는 문제 Integer obj = integerBox.get(); //Object 타입 Integer = Object 성립하지 않는다. -> downCasting 필요 잘
개 병원은 개만, 고양이 병원은 고양이만 T에는 어떤 값이 들어올지 모른다. Animal에 대한 타입인자가 들어오길 기대했지만, Animal이라는 코드는 없음, 따라서 Object 타입으로 가정, Object가 제공하는 메서드만 호출 가능 Animal에 대한 기능은 사

synchronized 단점 무한대기 공정성 LockSupport는 스레드를 waiting 상태로 변경Waiting 상태는 누가 깨워주기 전까지는 계속 대기, CPU 스케줄링에 포함되지는 않는다. park : 스레드를 waiting 상태로 변경 parkNanos : 나

멀티스레드 프로그래밍에서 자주 등장하는 동시성 문제중 하나, 여러 스레드가 동시에 데이터를 생산, 소비하는 상황을 다룸 생산자 소비자 문제를 이해, 올바른 해결방안 함께 알아둬야 함 생산자 : 데이터를 생성하는 역할소비자 : 생성된 데이터를 사용하는 역할버퍼 : 생산자

생산자 스레드가 대기하는 곳과, 소비사 스레드가 대기하는 곳을 나누면 비효율성 문제를 해결! Lock, ReentrantLock을 사용 Condition ReentrantLock이 스레드가 대기하는 공간. lock.newCondition() 메서드를 호출, 스레드 대기

멀트 스레드 상황에서 다른 스레드 간섭 없이 안전하게 처리되는 연산 i = 1은 쪼갤 수 없는 연산 = 원자적 연산 순서가 나뉘어 진행되기 때문에 원자적 연산이 아니다. 원자적 연산이 아닌 경우, synchromized 블럭이나, lock등을 사용하는데 안전한 임계 영

util 패키지에 있는 컬렉션 프레임워크는 원자적인 연산을 제공?? 여러 스레드가 동시에 접근해도 괜찮을까?? == Thread Safe단일 스레드로 진행했기 때문에 문제 없음 가정 1) 스레드 1,2가 동시에 수행 -> A 값이 들어가고 B가 들어갈때 A값을 변경 가

스레드 생성 비용으로 인한 문제 스레드를 사용하려면, 먼저 스레드를 생성, 그런데 스레드는 무거움 메모리 할당 : 각 스레드는 자신만의 호출 스택(call stack)을 가지고 있어야 한다. 이 호출 스택은 스레드가 실행되는 동안 사용하는 메모리 공간. 스레드를 생성할

서버를 운영중에 만약 서버 기능을 update 하기 위해 서버를 재시작 어떤 작업을 처리 중에 갑자기 재시작, 해당 작업의 작동이 제대로 진행 안됨 가장 이상적인 방형은 새로운 진행 중인 작업은 막고, 이미 진행중인 주문은 모두 완료한 다음 재시작 ExecutorSer

컴퓨터 메모리는 반도체로 구성, 트렌지스터들이 모여 하나의 반도체를 구성하고, 전기가 흐르고 안흐르고를 0과 1로 표기 = 이진수라 표현 (RAM)전구를 켜고 끈다는 것은 0과 1만 나타낼수 있는 2진수로 표현 컴퓨터는 사람과 같이 10진수를 이해하고 숫자를 메모리에

데이터를 밖으로 보내려면 출력 스트림 사용, 외부 데이터를 자바 프로세스 안으로 가져오려면 입력 스트림 각 스트림의 경우 단방향 new FileOutputStream("temp/hello.dat");파일에 데이터를 출력 파일이 없으면 파일을 자동으로 형성, 데이터를 해

byte\[] writeBytes = writeString.getBytes(UTF_8)String -> byte 로 변환시 String.getByte()을 사용 문자를 byte 숫자로 변환, 문자 집합을 지정 String readString = new String(re
데이터를 메모리에 보관하기 때문에 자바 종료시 정보 사라진다. 빈 컬렉션 반환new ArrayList() 보다는 List.of 사용 문제점 모든 타입을 문자로 저장하는 문제 구분자를 사용하는 문제 자바의 데이터 타입을 그대로 사용 가능, 자바 타입을 그대로 사용하면서
파일이나 폴더를 생성, 삭제, 정보 확인 가능 File을 사용하던거에 비해 성능이 훨씬 개선 수많은 Util 기능 함유. 절대 경로 : 처음부터 입력한 모든 경로 표기 상대 경로 : 경로의 계싼이 모두 끝난 경로, 정규 경로는 하나만 존재 FileReader, File

"Hello" -> 문자를 서버에 전달 -> 클라이언트 요청에 "World!" Localhost, 127.0.0.1"localhost는 현재 사용중인 컴퓨터 자체를 가리킴 localhost는 127.0.0.1 이라는 IP로 Mapping127.0.0.1은 IP 주소 체