오늘부터 CS공부를 다시 시작한다.
CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
해당 인프런 강의를 기반으로 정리할 것이고, 알고있는 내용은 과감히 제외하고 조금이라도 애매한 개념만 정리한다.
{
"name": "홍길동",
"age": 26
}
위와 같은 형태로, key : value로 사용
중복 key의 경우 가장 마지막에 선언된 중복 key의 value가 전달된다.
"길동이의 메모장"
[1,2,3,4]
→ 이것도 JSON으로 사용가능. 하지만 일반적으로 사용되지않음.
프롤로그(버전, 인코딩) / 루트요소(단 하나만) / 하위요소 로 구성됨<?xml version="1.0" encoding="UTF-8"?> // 프롤로그
<OSTList like="1"> // 루트 요소
<OST> // 하위 요소
<name>마녀 배달부 키키</name>
<song>따스함에 둘러쌓인다면</song>
</OST>
<OST like="2">
<name>하울의 움직이는 성</name>
<song>세계의 약속</song>>
</OST>
</OSTList>
⭐️ HTML과 XML의 차이는?
⭐️ JSON과 XML의 차이는?
XML의 활용
둘 이상의 컴퓨터 프로그램이 서로 통신하는 방법이자 중계 계층을 의미.
컴퓨터의 하드웨어를 소프트웨어적으로 구현한 것을 의미
물리적인 컴퓨터 한 대에 하나의 OS를 깔고 여러 가지 프로그램을 설치하는 방식
계정을 나눠 여러 명의 사용자가 이용할 수 있도록 할 수 있지만 어떤 프로그램을 설치했을 때 다른 앱에 영향
가상머신을 기반으로 배포하는 것을 의미
한대의 컴퓨터를 가지고 여러 개의 OS를 구동할 수 있게 되며 CPU, RAM을 물리적으로 갈아끼는 것이 아니라 설정만으로 이를 수행할 수 있게 되었음

Hypervisor는 하나의 시스템 상에서 가상 컴퓨터를 여러 개 구동할 수 있도록 해주는 중간 계층
다른 공급자가 호스팅하고 인터넷을 통해 사용자에게 제공되는 인프라, 플랫폼 또는 소프트웨어
이를 이용하면 자체 인프라나 하드웨어 설치 없이도 애플리케이션과 리소스에 쉽고 싸게 이용이 가능

기업이나 개인이 자체 시설에서 보유하고 직접 유지 관리하는 프라이빗 데이터 센터(IDC)를 의미
ex) 네이버 데이터센터

인프라형 클라우드서비스.
클라우드가 단지 인프라를 제공하는 것.
node.js, MongoDB 등을 개발자가 직접 설치해야하는 대신 특정 서비스에 종속되지 않음.
→ 그냥 빈 방
ex) AWS EC2
플랫폼형 클라우드 서비스
클라우드가 플랫폼을 제공.
node.js, MongoDB 등이 설치되어있으며 그저 클릭을 통해 해당 서비스를 이용.
모니터링, CI/CD 제공
→ 빌트인 아파트
ex) heroku
서비스형 클라우드 서비스
완전한 서비스를 클라우드 서비스로부터 제공받아 사용
클라우드를 통해 다른 컴퓨터에서도 쉽게 작업 + 다른 사람과 실시간 공유작업이 가능
ex) 구글 Docs
| Iaas | PaaS | |
|---|---|---|
| 유연성 | 높음 | 낮음 |
| 이식성 | 높음 | 낮음 |
| 운영비효율 | 낮음 | 높음 |
애플리케이션이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 코드, 모든 종속성을 패키징하는 소프트웨어의 표준 단위
컨테이너는 OS를 공유하기 때문에 빠르고, 경량화되어있으며 격리성도 훌륭하다.
그러나 OS 자체에 문제가 생기면 다른 앱에도 영향을 미칠 수 있음.
→ 가상머신의 진화버전
컨테이너에 필요한 기능을 제공하는 플랫폼
코드구축부터 배포까지 일련의 과정들을 CI/CD 파이프라인이라고 부름
빌드 → 테스트 → 머지 → 배포
ex) github actions, jenkins 등
클래스 : 객체를 만들어내기 위한 틀. 객체의 속성과 메서드의 집합
객체 : 클래스로부터 만들어지는 실체, 클래스로 선언된 변수를 객체라고 함
인스턴스 : 객체가 메모리에 할당이 된 상태. 런타임에 구동되는 객체. 객체 == 인스턴스

클래스의 인스턴스가 아닌 클래스에 속하는 고정 멤버.
static 변수와 static 메서드를 만들 수 있으며 정적필드, 정적 메소드라고도 함. (정적 멤버)
클래스로더가 클래스를 로딩해서 적재할 때 클래스별로 관리됨.

장점 : 클래스 당 메서드나 변수를 선언해서 중복을 없앨 수 있다.
단점 : 선언을 하는 순간 메모리에 올라가기 때문에, 해당 객체를 사용하지않아도 메모리에 올라가있는 상태이다.
오버로딩 : 매개변수 개수, 타입, 순서를 다르게 해서 같은 이름으로 여러개의 함수를 정의할 수 있는 것
class Calculator{
void multiply(int a, int b){
System.out.println("결과는 : "+(a * b) + "입니다.");
}
void multiply(int a, int b,int c){
System.out.println("결과는 : "+(a * b * c) + "입니다.");
}
void multiply(double a, double b){
System.out.println("결과는 : "+(a * b) + "입니다.");
}
}
class Person{
void pay(String a, int b){
System.out.println(a + "가 "+ b + "원만큼 계산합니다.
}
void pay(int a, String b){
System.out.println(b + "가 "+ a + "원만큼 계산합니다.
}
}
오버라이딩 : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의하는 것
class Animal {
void eat(){
System.out.println("먹습니다.");
}
}
class Person extends Animal {
@Override
void eat() {
System.out.println("사람처럼 먹습니다.");
}
}
복잡한 데이터, 구조, 시스템 등으로부터 핵심만을 가려내 덜 자세하게 만드는 것.
세부사항, 절차 등 (자세한 구현내용)을 감추고 인터페이스 등을 만드는 것으로 복잡도를 낮추는 방법.
공통점은 모으고, 차이점은 버린다.
abstract class Animal {
public abstract void animalSound();
public void sleep() {
System.out.println("zzz");
}
}
class Pig extends Animal {
public void animalSound() {
System.out.println("꿀꿀꿀~");
}
}
class Dog extends Animal {
public void animalSound() {
System.out.println("왈왈~");
}
}
어떠한 내부 프로세스를 숨기는 것을 의미.
ex) DB가 어떻게 데이터를 저장하는지 모르지만 insert, upsert 등의 쿼리로 데이터를 저장할 수 있음
