Backend 27

변수

컴퓨터는 단순한 기계이다. 트랜지스터 -> 논리소자 -> 계산기 -> 명령프로그래밍 -> 컴퓨터 변수란? - 값을 저장하는 메모리 공간을 가리키는 이름 - 프로그램이란 결국 데이터를 연산/조작 하는일 ex. 이미지도 VM에서 숫자를 보여주는 것일 뿐 변수 선언 var a int = 10 // 변수키워드 변수이름 변수타입(+사이즈) var msg string = "Hello Variable" int : 정수형 변수타입 = 10 : assign operator 10을 좌변의 메모리 공간에 복사한다. 컴퓨터에겐 컴파일러를 통해(16진수) 메모리 주소의 공간에 저장된다 GO는 강타입 언어 숫자타입 모든 정수타입 uint8, uint16, uint32, uint64 : unsigned integer uint8 :..

Backend/Golang 2021.05.03

Java 인터페이스(Interface)

목표 자바의 인터페이스에 대해 학습하세요. 학습할 것 (필수) 인터페이스 정의하는 방법 인터페이스 구현하는 방법 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 인터페이스 상속 인터페이스의 기본 메소드 (Default Method), 자바 8 인터페이스의 static 메소드, 자바 8 인터페이스의 private 메소드, 자바 9 인터페이스 정의하는 방법 자바의 인터페이스 - 인터페이스는 추상 메서드의 집합이다. (static,디폴트 메서드, 상수 도 포함되지만 중요하지 않음) - 자바에서의 인터페이스는 기본적으로 무언가를 규제하기 위한 것이다. 추상클래스는 일반클래스, 일반 메서드를 가질 수도 있다. but 인터페이스는 추상메서드만의 집합이다. 정의하는 방법 - 값이 들어갈 수 있고, 메소드는 실제 구..

Backend/Java 2021.03.06

Java - 패키지 (package/import/클래스패스/접근지시자)

목표 자바의 패키지에 대해 학습하세요. 학습할 것 (필수) package 키워드 import 키워드 클래스패스 CLASSPATH 환경변수 -classpath 옵션 접근지시자 패키지(package) - 서로 관련된 클래스의 묶음.(자바8 이후 약 4000개의 클래스) - 클래스는 클래스파일, 패키지는 폴더. 하위 패키지는 하위 폴더로 .단위로 내려간다. - 클래스의 실제 이름(full name)은 패키지를 포함.(java.lang.String) - rt.jar는 클래스들을 압축한 파일(JDK설치 경로 jre\lib에 위치. but 자바9부터 모듈개념이 들어가면서 rt.jar이 없어짐. (jar파일 압축파일로 ide에서 압축풀어서 볼 수 있음) 패키지의 선언 - 패키지는 소스파일의 첫번째 문장으로 단 한번 ..

Backend/Java 2021.03.05

멀티쓰레드 프로그래밍

목표 자바의 멀티쓰레드 프로그래밍에 대해 학습하세요. 학습할 것 (필수) Thread 클래스와 Runnable 인터페이스 쓰레드의 상태 쓰레드의 우선순위 Main 쓰레드 동기화 데드락 Thread 클래스와 Runnable 인터페이스 쓰레드를 정의하는 방법은 2가지 방법이 있습니다. Thread를 상속받는 방법과 Runnable의 인터페이스를 받아서 정의하는 방법이 있습니다. //Thread 클래스 상속 import java.util.Random; public class MyThread extends Thread { private static final Random random = new Random(); @Override public void run() { String threadName = Thread..

Backend/Java 2021.03.04

[Java] 멀티스레드 와 멀티 프로세스

학습목표 자바 스레드란? 스레드와 프로세스의 차이 멀티 프로세스와 멀티 스레드의 차이 컴퓨터 유저는 동시에 한개 이상의 시스템을 쓸 수 있는 것을 당연히 받아들인다. 하나의 어플리케이션일지라도 하나 이상의 작업을 동시에 진행한다. 동시에 오디오를 들으며 playback그리고 화면이 업데이트되는 등 여러작업이 동시에 진행된다. 이런 것을 concurrent software라고 한다. Java플랫폼은 concurrent programming을 적용되어 있다. Java 5.0이후 high-level concurrency API들을 제공한다. (java.util.concurrent) # 자바 스레드(Java Thread) 란? 일반 스레드와 거의 차이가 없으며, JVM가 운영체제의 역할을 한다. 자바에는 프로세..

Backend/Java 2021.03.03

Java NIO 알아보기

Java NIO > java.nio.file 패키지에서 file I/O, 디렉토리 I/O에 관해서 알아보자. 유저영역 : 실행 중인 프로그램이 존재하는 제한된 영역으로 하드웨어에 직접 접근이 불가. 커널영역 : 반대로 하드웨어에 직접 접근이 가능하고 다른 프로세스를 제어할 수 있는 영역을 말함. 이런 그림을 기반으로 기반의 I/O 프로세스를 정의해보면 다음과 같습니다. ※ 자바 I/O 프로세스 1) 프로세스가 커널에 파일 읽기 명령을 내림. 2) 커널은 시스템 콜[read()]을 사용해 디스크 컨트롤러가 물리적 디스크로부터 읽어온 파일 데이터를 커널 영역안 버퍼에 쏜다. * DMA(Direct Memory Access) : CPU의 도움없이 물리적 디스크에서 커널영역의 버퍼로 데이터를 읽어오는 것 3) ..

Backend/Java 2021.03.01

Java I/O (Input / Output)

목표 자바의 Input과 Output에 대해 학습하세요. 학습할 것 (필수) 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O InputStream과 OutputStream Byte와 Character 스트림 표준 스트림 (System.in, System.out, System.err) 파일 읽고 쓰기 # 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O 1. 스트림(Stream) 기반의 I/O Byte Streams : 프로그램은 바이트 스트림을 8비트 I/O를 수행하기 위해 사용한다. 모든 바이트 스트림 클래스는 InputStream과 OutputStream의 자손 클래스이다. 많은 바이트 스트림 클래스가 있다. 대표적으로 ..

Backend/Java 2021.02.21

JAVA 상속

학습목표 자바 상속의 특징 super 키워드 메소드 오버라이딩 다이나믹 메소드 디스패치 (Dynamic Method Dispatch) 추상 클래스 final 키워드 Object 클래스 # 자바 상속의 특징 객체에 메소드(기능)를 추가하는 것을 하고 싶다. 그러나 아래 2가지 때문에 어렵다. 1. 만약 객체에 추가하는 메소드를 자신이 만들지 않았다. 그렇다면 원 소스를 업데이트 하면 추가한 메소드가 사라져서 이런 문제가 일어나지 않기 위해서는 지속적으로 코드를 관리해야 한다. 2. 해당 객체가 다양한 곳에서 사용되면 다른 곳에서 불필요한 기능이 포함될 수 있다. 그럼 기존의 객체를 그대로 유지하면서 어떤 기능을 추가하는 방법이 없을까? 이런 맥락에서 등장하는 것이 상속이다. 즉 기존의 객체를 수정하지 않으..

Backend/Java 2021.02.20

annotations

학습목표 애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 애노테이션 기본 @GetMapping("hello") //hello 같이 동적인 변수는 들어갈 수 없다. static(정적)이어야 한다. public String hello(){ return "hello"; } # 애노테이션 정의하는 방법 애노테이션의 여러 가지가 있는 데 주로 3가지 용도로 쓰인다. 1. 컴파일러에 대한 정보 : 컴파일러가 오류를 감지하거나 경고를 억제하는 데 주석을 사용할 수 있다. 2. 컴파일 시간 및 배포 시간 처리 : Software tools 는 annotation 정보를 처리하여 코드를 생성, XML 파일 등을 생성할 수 있다. 3. 런타임 처리 : 일부 주석을 런타임..

Backend/Java 2021.02.06

Enum 자바의 열거형

학습 목표 enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet enum은 자바 5.0부터 사용할 수 있게 되었다. 상수는 유일무이 고정된 값. enum 정의하는 방법 상수의 그룹을 미리 정할 수 있는 것이 열거형(enumerated type)이다. 서로 연관된 상수들의 집합이라고 할 수 있다. 문법적으로 미리 상수를 고정시켜서, 런타임 에러를 방지하고, 컴파일시에 발견할 수 있도록 한다. (좋은 프로그래밍은 자기자신을 견제해야 한다.) class Fruit{ public static final Fruit APPLE = new Fruit(); public static final Fruit PEACH = new Fruit(); p..

Backend/Java 2021.01.29