본문 바로가기

전체 글

(83)
네트워크 기초 서브넷팅 서브넷은 하나의 네트워크가 분할된 작은 네트워크이고 또 작은 네트워크로 나누는 작업을 서브넷팅이라고 한다. 서브넷팅을 하는 이유는? IP주소 낭비를 방지하기 위해 네트워크를 분할하여 효율적으로 사용하기 위해서이다. IP주소에는 네트워크ID와 호스트ID가 있고 또 호스트ID에서 서브넷팅으로 분할하면 서브넷ID와 호스트ID로 나눠진다. 서브넷팅 실습 네트워크 주소는 172.16.0.0 서브넷 마스크 255.255.0.0 먼저 네트워크주소를 2진수로 나타내면 10101100 00010000 00000000 00000000 (굵게 표시된 호스트 부분은 B클래스에서는 10으로 표시된다.) B클래스인 경우 앞에 16비트는 네트워크ID, 뒤에 나머지 16비트는 호스트 ID로 나눠진다. B클래스로 나타내면 호스트ID ..
Rust 아토믹(atomic)연산 스레드 아토믹 연산자를 사용하면 여러 스레드가 안전하게 동일한 변수를 읽고 변경할 수 있다. Ordering::Relaxed는 순서 제한은 없으며 원자적 작업만 가능하다. while인자에 load메서드로 감싼 some_work메서드는 Relaxed의 영향을 받는다 (load메서드는 아토믹 변수에 저장된 값을 읽는다 즉 Relaxed로 설정한 인자 값을 읽는다) store 메서드 인자에 Relaxed의 논리값을 true로 설정해서 load메서드를 통해 읽어들어서 백그라운드 스레드가 실행되어break 명령을 만날때까지 스레드가 계속 실행된다(store메서드는 값을 수정하더라도 독자적 참조가 아닌 공유참조를 사용한다.) 종료프로그램 코드예시use std::sync::atomic::AtomicBool; use std:..
Rust 스레드 파킹 파킹을 사용하여 잠금을 하고 해제할 수 도 있다. 스레드 park()는 잠금, unpark() 잠금해제이다. 예를 들어 큐가 비어 있으면 스레드를 잠금하고 다른 곳에서 스레드를 잠금해제하여 깨워서 1초동안 0부터 시작하여 값을 호출한다.use std::collections::VecDeque; use std::sync::Mutex; use std::thread; use std::time::Duration; fn main() { let queue = Mutex::new(VecDeque::::new()); thread::scope(|s|{ let t = s.spawn(|| loop { let item = queue.lock().unwrap().pop_front(); if let Some(item) = item..
Rust 스레드 조건 변수 대기와 알림 조건변수(condition variable)를 사용해 데이터에 어떤일이 발생할 때 까지 대기했다가 알림 메서드를 호출하여 하나 또는 모든 대기스레드를 깨울 수 있다. 예를 들어 데이터를 추가 할 때 조건변수를 사용하여 데이터가 비어 있으면 값을 추가하고 데이터가 비어 있지 않으면 wait함수를 사용해 기다렸다가 notify_one 메서드를 사용해 하나의 메서드를 깨워서 비어있지 않고 데이터 값이 있다고 알림을 해준다.use std::collections::VecDeque; use std::sync::Condvar; use std::sync::Mutex; use std::thread; use std::time::Duration; fn main() { let queue = Mutex::new(VecDeque..
인터페이스 설계도 동물 클래스를 상속받고 동물 중에 애완동물 클래스도 상속 받고 싶다 하지만 다중상속은 위험해서 다중상속의 문제점을 해결하기 위해 인터페이스를 사용하기로 한다. package ch01.sec01; public interface Pet { // 추상메서드 public abstract void beFriendly(); public abstract void play(); } 상속받은 강아지,고양이 클래스에 몸통({})을 만들어 추상메서드를구현해야한다. package ch01.sec01; public class Dog extends Animal implements Pet { @Override public void beFriendly() {} @Override public void play() { } } packa..
다형성 강아지,고양이,하마,햄스터등 이와같은 동물들의 공통적인 행동을 그룹화 싶을 때 어떻게 하면 좋을까? 먼저 하위클래스에 있는 고양이,강아지 클래스를 상위 클래스인 동물클래스로 상속시켜 오버라이딩을 시켜보자 package ch01.sec01; public class Animal { // 동물 무리를 지어서 움직이는 성향 public void roam() {} // 소리 public void makeNoise() {} // 먹이 public void eat() {} } package ch01.sec01; public class Dog extends Animal { } package ch01.sec01; public class Cat extends Animal { } 동물 등록을 하는 MyAnimalList 클..
PHP 쿼리스트링을 사용하여 콘텐츠 선택하기 _GET 슈퍼글로벌 배열을 사용하여 쿼리스트링에 전송될 key를 도시로 설정하고 value값을 주소로 설정하였다. 그리고 foreach로 감싸진 a태그는 키와 값에 접근하여 반복한다 https://www.yes24.com/Product/Goods/118203397 백엔드 프로그래밍을 위한 PHP & MySQL - 예스24이제 프로그래밍 공부도 아름답고 우아하게 하자 지루하고 어려운 프로그래밍 서적은 이제 그만. 화려하고 아름다운 이미지로 프로그래밍을 공부하자. 간결한 코드로 따라 하기 쉽고, 무엇보다www.yes24.com
PHP 객체의 속성에 객체 저장 예제 코드를 보면 객체의 속성을 다른 객체에 있는 속성을 불러와서 저장할 수 있다. class Account { public AccountNumber $number; // 다른 객체 AccountNumber타입의 속성을 가져와서 저장할 수 있다 public string $type; protected float $balance; ...... } // 다른 객체 class AccountNumber { public int $accountNumber; public int $routingNumber; public function __construct(int $accountNumber, int $routingNumber) { $this->accountNumber = $accountNumber; $this->rout..