CS 45

[Java] String, StringBuffer, StringBuilder

String, StringBuffer, StringBuilder 분류 String StringBuffer StringBuilder 변경 Immutable (불변) Mutable (가변) Mutable 동기화 Synchronized 가능 (Thread-safe) Synchronized 불가능 1. String 클래스의 특징 (객체 생성 방법에 따른 차이) String은 기본형(int, floa, char 등)과는 다르고, 첫 글자가 대문자로 시작하는 클래스이다. 1. new 연산을 통해 생성된 인스턴스의 메모리 공간은 변하지 않음 (Immutable) 값이 같은 String은 String Pool 내에서 String 객체를 공유 // 1. String s1 = "Hello"; // 2. String s2 ..

CS/Java (CS) 2024.02.04

[Network] 웹페이지 요청에 대한 처리

갑자기 급 궁금해져서 전공책을 뒤적거려 봤다. (나의 마지막 발악이랄까) 그림 6.32는 학생 Bob이 학교의 이더넷 스위치에 랩톱을 연결하고 웹 페이지(www.google.com)를 다운로드하는 것을 보여준다. 💡 이렇게 단순한 요청을 처리하는 데 많은 것들이 "아래에서" 진행되고 있다! ✔️ 시작하기: DHCP, UDP, IP 그리고 이더넷 그림 6.32처럼 Bob은 랩톱을 켠 후, 학교 이더넷 스위치(학교 라우터에 연결되어 있음)에 연결되어 있는 이더넷 케이블에 연결한다. (이 예제에서 학교 라우터는 ISP com-cast.net에 연결되어 있고, comcast.net은 이 학교에 DNS 서비스를 제공하며, DNS 서버는 학교 네트워크가 아닌 콤캐스트(Comcast) 네트워크에 있다.) (DHCP ..

CS/Network 2023.11.08

[Java] 객체지향 프로그래밍 (OOP)

0. 객체지향 프로그래밍(OOP)이란? 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 '객체'를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 💡 객체란? → 객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음 ※ 참고 : OOP란? → Object-Oriented Programming 1. 객체지향의 장단점 ➕ 장점 ▶ 코드 재사용이 용이 남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서 사용할 수 있음. ▶ 유지보수가 쉬움 절차 지향 프로그래밍에서는 코드를 수정해야할 때 일일이 찾아 수정해야하는 반면, 객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메서드로 존..

CS/Java (CS) 2023.11.07

[Java] 오토 박싱 & 오토 언박싱

✔️ 오토 박싱 & 오토 언박싱 자바에는 기본 타입(primitive type)과 Wrapper 클래스가 존재한다. 기본 타입 (primitive type) : stack 에 값을 저장 정수 타입(byte, short, int, long) 소수 타입(float, double) bool 타입(boolean) 문자 타입(char) Wrapper 클래스 : stack 에 주소를 저장하고 heap 에서 값을 참조 정수 타입(Byte, Short, Integer, Long) 소수 타입(Float, Double) bool 타입(Boolean) 문자 타입(Character) 값 비교에는 equals를 사용합니다. ==는 인스턴스의 주소비교에 사용 ✔️ 박싱 기본 타입 데이터에 대응하는 Wrapper 클래스로 만드는 ..

CS/Java (CS) 2023.11.07

Blocking I/O & Non-Blocking I/O

✔️ I/O가 성능에 미치는 영향 ❓ I/O란? 데이터의 입력(Input)과 출력(Output)을 함께 일컫는 말이다. ※ 일반적으로 I/O라고 하면, 파일 I/O만 생각하는 경우가 있는데, 어떤 디바이스를 통해 입력과 출력이 이뤄지는 작업을 모두 I/O라고 합니다. 네트워크를 통해 다른 서버로 데이터를 전송하거나, 다른 서버로부터 데이터를 전송받는 것도 I/O에 포함됩니다. 💡 I/O는 어플리케이션의 성능에 가장 영향을 많이 미칩니다! 따라서 높은 성능을 보장해야 하는 어플리케이션 입장에서는 I/O는 큰 장애물이 될 수 있습니다. I/O로 인한 blocking은 CPU를 긴 시간동안 idle하게 두기 때문에, 다른 작업을 할 수 있음에도 오랫동안 다른 작업을 실행할 수 없어 매우 비효율적입니다. ※ i..

CS/Network 2023.02.26

[Network] SSL / TLS HandShake

✔️ 들어가기 전... HTTPS는 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 TLS / SSL 계층을 넣은 신뢰할 수 있는 HTTP 요청을 말한다. → 이를 통해 '통신을 암호화' 한다. ※ 참고 : 향상된 TCP 버전을 SSL이라 부르고, SSL의 약간 변형된 버전이 TLS(표준화됨)이다. 더보기 SSL(Secure Socket Layer)은 SSL 1.0부터 시작해서 SSL 2.0, SSL 3.0, TLS(Transport Layer Security Protocol) 1.0, TLS 1.3까지 버전이 올라가며 마지막으로 TLS로 명칭이 변경되었으나, 보통 이를 합쳐 SSL/TLS로 많이 부른다. ✔️ 대칭키 암호화 vs 공개키 암호화(비대칭 암호화) 💡 대칭키 암호화 대칭키 암호란, 암호화에..

CS/Network 2023.02.16

TCP/IP 흐름제어 & 혼잡제어, TCP의 신뢰성 보장

💡 일반적으로 TCP는 3-way-handshaking과 흐름제어, 혼잡제어를 통해 신뢰성을 보장한다. 네트워크 통신 과정 도중에는 네트워크 혼잡성 및 receiver의 overload 등의 사유로 데이터가 손실되거나, 전달 순서가 바뀌는 등의 문제가 발생할 수 있다. → 이런 문제를 해결하고, 통신의 신뢰성을 보장하기 위해 TCP/IP에서 사용하는 것이 흐름제어와 혼잡제어이다. 💡 이같이 흐름제어는 속도를 일치시키는 서비스이다. → 수신하는 애플리케이션이 읽는 속도와, 송신자가 전송하는 속도를 같게 한다. ※ TCP 버퍼 더보기 전송 및 수신 전 TCP 세그먼트를 보관하는 곳이다. 송신 측은 버퍼에 TCP 세그먼트를 보관한 후 순차적으로 전송하고, 수신 측은 도착한 TCP 세그먼트를 애플리케이션이 읽을..

CS/Network 2023.02.12

[Java] 예외 처리(Exception Handling)에 관하여

이제야 정리하는... 글로만 읽어선 머릿속에 안 들어온다. 시간이 오래 걸리지만, 그래도 글로 써야겠다는 생각이 든다. ✔️ 예외 처리(Exception Handling) 예외처리란, 프로그램 실행 흐름 상 오류가 발생했을 때 그 오류를 대처하는 방법이다. 💡 프로그램 오류 프로그램 실행 중 어떤 원인에 의해 프로그램이 해당 상황에 대처하지 못할 경우, 비정상적으로 종료되거나 에러 팝업창이 뜨는 경우이다. ✔️ 발생 시점에 따른 에러 분류 💡 Compile Error 컴파일 시점에서 발생하는 에러로, 소스코드를 컴파일러가 컴파일 하는 시점에서 소스의 오타나 잘못된 구문, 자료형 체크 등 검사를 수행하는데 발생하는 에러이다. 이 시점에서 발생하는 문제들은 수정 후 컴파일을 성공적으로 마칠 경우 클래스 파일..

CS/Java (CS) 2023.02.10

[운영체제] 페이지 교체 알고리즘

✔️ 페이지 교체 알고리즘이란? 페이징 기법으로 메모리를 관리하는 운영체제에서, 페이지 부재가 발생하여 새로운 페이지를 할당하기 위해 현재 할당된 페이지 중 어느 것과 교체할지를 결정하는 방법이다. 메모리는 한정되어 있기 때문에 스와핑이 많이 일어난다. 따라서 스와핑은 많이 일어나지 않도록 설계되어야 하며, 이는 페이지 교체 알고리즘을 기반으로 스와핑이 일어난다. 이 알고리즘이 사용되는 시기는 페이지 부재가 발생해 새로운 페이지를 적재 해야하나, 페이지를 적재할 공간이 없어 이미 적재되어 있는 페이지 중 교체할 페이지를 정할 때 사용된다. 빈 페이지가 없는 상황에서, 메모리에 적재된 페이지와 적재할 페이지를 교체함으로써 페이지 부재 문제를 해결할 수 있다. 페이지 교체 알고리즘은 '온라인 알고리즘'이다...

CS/운영체제 2023.02.05

[운영체제] 메모리 관리, 페이징 & 세그멘테이션

운영체제의 대표적인 할일 중 하나가 메모리 관리이다. (CPU 관리, 메모리 관리, I/O 장치 관리) 컴퓨터 내의 한정된 메모리를 극한으로 활용해야 하는 것이다. ※ 메모리란? 더보기 프로그램과 프로그램 수행에 필요한 데이터 및 코드를 저장하는 장치이다. 즉, 작업을 위해 사용되는 공간이다. 컴퓨터 메모리의 내용은 보조기억장치로 전송할 수 있는데, 이는 가상 메모리라 불리는 메모리 관리 기법을 통해 가능하다. ※ 운영체제의 역할 더보기 실행파일이 로더에 의해 메모리에 올라오고, 운영체제는 이 실행 파일을 메모리에 어느 부분에 올릴지 결정한다. ※ 자바는 OS 메모리 영역에 직접적으로 접근하지 않고, JVM이라는 가상 머신을 이용해서 간접적으로 접근한다. ✔️ 메모리 관리가 필요한 이유는? 프로그램의 실..

CS/운영체제 2023.02.04