접근 제한자: 클래스 및 인터페이스, 멤버의 접근을 제한한다.
접근 제한자 사용
*캡슐화: 정보 은닉. 관련이 있는 데이터, 동작들을 하나로 묶어 요약하고 사용자에게는 내부적인 접근을 허용하지 않는 대신 편의성을 제공해 준다.
→ 데이터 보호, 유지보수, 사용자 편의성 면에서 장점을 가진다.
생성자(Constructor)
메서드명이 클래스명과 동일하고, 리턴 자료형을 정의하지 않는 메서드.
→ 객체 변수에 값을 무조건 설정해야만 객체를 생성함.
생성자의 규칙
✔️ 개발자가 아무런 생성자도 만들지 않으면 자바는 인자가 없는 기본 생성자를 자동으로 만들어 준다.
*기본 생성자: 생성자의 입력 항목이 없고 생성자 내부에 아무 내용이 없는 생성자.
package constructor01;
public class Animal {
}
package constructor01;
public class Animal {
public Animal() {}
}
예제 1처럼 만들어도 컴파일 과정에서 자바 컴파일러가 알아서 예제2처럼 기본 생성자를 만들어 준다.
✔️ 인자가 있는 생성자를 하나라도 만든다면 자바는 기본 생성자를 만들어 주지 않는다.
✔️ 생성자는 객체가 생성될 때 호출된다.
new 클래스명(입력 인수, …)
public class Animal {
public Animal(String name) {
System.out.println(name);
}
}
public class Example {
public static void main(String[] args) {
Animal Dog = new Animal("Dog");
}
}
생성자 오버로딩
하나의 클래스에 여러 개의 입력 항목이 다른 생성자를 만들 수 있다. (메서드 오버로딩과 동일한 개념)
public class Animal {
public Animal(String name) {
...
}
public Animal(int type) {
...
}
}
SOLID: 객체 지향 설계 5원칙 → 응집도는 높이고 결합도는 낮춘다.
✔️ SRP: 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다.
✔️ OCP: 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다.
✔️ LSP: 서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다.
하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는 데 문제가 없어야 한다.
예: 아버지 춘향이 = new 딸() → X
동물 뽀로로 = new 펭귄() → O
펭귄이 동물 역할을 하는 것은 문제가 되지 않는다.
✔️ ISP: 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다.
✔️ DIP: 자신보다 변하기 쉬운 것에 의존하지 마라.
*응집도: 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성
응집도가 높은 모듈은 하나의 책임에 집중하고 독립성이 높아져 재사용이나 기능의 수정, 유지보수가 용이하다.
*결합도: 모듈(클래스) 간의 상호 의존 정도
결합도가 낮으면 모듈 간의 상호 의존성이 줄어들어 객체의 재사용이나 수정, 유지보수가 용이하다.
유튜브에 올라온 영상들을 보며 데이터 전송 과정이 어떤 식으로 흘러가는지 공부했다.
+) 22. 06. 22. 복습해서 추가함!
OSI 7계층과 TCP/IP 스택은 복잡한 네트워크를 단계별로 나누어 이해하기 쉽도록 도와준다.
1~4계층: 데이터 플로 계층(Data Flow Layer) / 하위 계층(Lower Layer)
→ 데이터를 상대방에게 잘 전달하는 역할.
5~7계층: 애플리케이션 계층(Application Layer) / 상위 계층(Upper Layer)
→ 데이터를 만드는 부분.
1계층(피지컬)
물리적 연결과 관련된 정보를 정의한다.
들어온 전기 신호를 그대로 잘 전달하는 것이 목적.
전기 신호가 1계층 장비에 들어오면 이 전기 신호를 재생성하여 내보낸다.
주요 장비: 허브, 리피터, 케이블, 커넥터, 트랜시버, 탭 등
허브, 리피터 → 네트워크 통신을 중재하는 네트워크 장비
전기 신호를 모아 우리가 알아볼 수 있는 데이터 형태로 처리한다.
주소 정보를 정의하고 정확한 주소로 통신이 되도록 하는 데 초점이 맞추어져 있다.
데이터에 대한 에러를 탐지하거나 고치는 역할을 수행할 수 있다.
(이더넷 기반 네트워크에서는 에러를 탐지하는 역할만 수행한다.)
MAC 주소 체계 존재.
스위치는 MAC 주소를 보고 통신해야 할 포트를 지정해 내보낸다.
네트워크 인터페이스 카드(네트워크 어댑터), 스위치
IP 주소와 같은 논리적인 주소가 정의된다.
데이터 통신을 할 때 2계층의 물리적인 MAC 주소와 3계층의 논리적인 IP 주소가 사용된다.
장비: 라우터
라우터는 IP 주소를 사용해 최적의 경로를 찾아주고 해당 경로로 패킷을 전송하는 역할을 한다.
1~3계층은 신호와 데이터를 올바른 위치로 보내고 실제 신호를 잘 만들어 보내는 데 집중한다.
4계층은 실제로 해당 데이터들이 정상적으로 잘 보내지도록 확인하는 역할을 한다.
패킷이 유실되거나 순서가 바뀌었을 때 바로잡아 주는 역할을 한다.
4계층에서 패킷을 분할할 때 패킷 헤더에 보내는 순서와 받는 순서를 적어 통신한다.
→ 패킷이 유실되면 재전송 요청 가능, 순서가 뒤바뀌어도 바로잡을 수 있음.
보내는 순서 == 시퀀스 번호
받는 순서 == ACK(Acknowledgement) 번호
장비: *로드 밸런서, 방화벽
→ 애플리케이션 구분자(포트 번호)와 시퀀스, ACK 번호 정보를 이용해 부하를 분산하거나 보안 정책을 수립해 패킷을 통과, 차단하는 기능을 수행한다.
*로드 밸런서에는 동일한 서비스를 하는 다수의 서버가 등록되고 사용자로부터 서비스 요청이 오면 로드 밸런서가 받아 사용자별로 다수의 서버에 서비스 요청을 분산시켜 부하를 분산한다.
*로드 밸런서는 각 서버의 서비스 상태를 체크해 서비스가 가능한 서버로만 사용자의 요청을 분산하므로 서버에서 장애가 발생하더라도 기존 요청을 분산하여 다른 서버에서 서비스를 제공할 수 있다.
5계층(세션)
양 끝단의 응용 프로세스가 연결을 성립하도록 도와주고, 연결이 안정적으로 유지되도록 관리하고 작업 완료 후에는 이 연결을 끊는 역할을 한다.
TCP/IP 세션을 만들고 없애는 책임을 진다.
에러로 중단된 통신에 대한 에러 복구와 재전송을 수행한다.
표현 방식이 다른 애플리케이션이나 시스템 간의 통신을 돕기 위해 하나의 통일된 구문 형식으로 변환시킨다. (like 번역기)
→ 사용자 시스템의 응용 계층에서 데이터의 형식상 차이를 다루는 부담을 덜어준다.
MIME 인코딩이나 암호화, 압축, 코드 변환 등
애플리케이션 프로세스를 정의하고 애플리케이션 서비스를 수행한다.
네트워크 소프트웨어의 UI 부분이나 사용자 입, 출력 부분을 정의한다.
프로토콜: FTP, SMTP, HTTP, TELNET 등
책이랑 구글링으로 개념 찾아봄! 노션으로 정리는 계속 하는 중.
PART 01. 운영체제와 컴퓨터
CHAPTER 01. 운영체제의 개요
커널: 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 모아놓은 것. (like 자동차 엔진 → 운영체제의 성능은 커널이 좌우한다.)
인터페이스: 커널에 사용자의 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할.
시스템 호출: 커널이 자신을 보호하기 위해 만든 인터페이스.
→ 자원을 이용하려면 시스템 호출이라는 인터페이스를 이용하여 접근해야 한다.
핵심 기능 | 설명 |
---|---|
프로세스 관리 | 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경 제공 |
메모리 관리 | 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간 제공 |
파일 시스템 관리 | 데이터를 저장하고 접근할 수 있는 인터페이스 제공 |
입출력 관리 | 필요한 입력과 출력 서비스 제공 |
프로세스 간 통신 관리 | 공동 작업을 위한 각 프로세스 간 통신 환경 지원 |
단일형 구조 커널: 커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성되어 있다. (예: MS-DOS, VMS, 초기 유닉스 운영체제)
계층형 구조 커널: 비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만들고 계층 간의 통신을 통해 운영체제를 구현한다.
마이크로 구조 커널: 운영체제가 프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등 가장 기본적인 기능만 제공한다.