추가적인 질의를 제공하는 부분으로, 웹 서버에 전달할 추가 데이터를 나타낸다. ( )
자원 경로를 나타내며, 서버 상에서 해당 리소스의 위치를 지정한다. ( )
웹 프로토콜을 정의하는 부분으로, 예를 들어 HTTP, FTP 등의 방식을 나타낸다. ( )
호스트와 포트 번호를 나타내는 부분으로, 서버 주소와 함께 포트번호를 나타낸다. ( )
특정 페이지 내의 위치를 가리키며, 문서 내 특정 섹션으로 이동하는 데 사용된다. ( )
🖍 ④③①②⑤
① scheme : 통신 방식 결정
② authority : 사용자 정보, 호스트, 포트 번호 조합
③ path : 리소스, 계층적 구조
④ query : 웹에서 제공하는 파라미터
⑤ fragment : html 내부 북마크, 하위
# include <stdio.h>
struct Node{
int value;
struct Node* next;
};
void func(struct Node* node){
while(node != NULL && node -> next != NULL) { // 현재 노드와 다음 노드가 NULL이 아닌 경우
int t = node -> value;
node -> value = node -> next -> value;
node -> next -> value = t;
node = node -> next -> next;
}
}
int main(){
struct Node n1 = {1, NULL};
struct Node n2 = {2, NULL};
struct Node n3 = {3, NULL};
n1.next = &n3; // n1이 가지고 있는 next 노드 포인터는 n3의 주소를 가리킴
n3.next = &n2;
func(&n1); // n1을 기준으로 while 조건문 실행
struct Node* current = &n1;
while(current != NULL) {
printf("%d", current -> value);
current = current -> next;
}
}
🖍 312
n1.next = &n3; n3.next = &n2;
→ 132func()
에 의해 값이 교환 됨 n1 → n3 → n2, 312node = node -> next -> next;
→n2
다음이null
이라서 종료
데이터베이스의 테이블에서 기본 키(Primary Key)를 구성하는 모든 속성은 널(null) 값을 가지면 안되는 무결성 제약조건
🖍 개체
def test(v):
if type(v) == type(""):
return len(v)
elif type(v) == type(100):
return 101
else:
return 20
a = "100.0"
b = 100.0
c = (100.0, 200.0)
print(test(a) + test(b) + test(c))
🖍 45
test(a)
= 5 : 데이터 타입이 string이라서 truetest(b)
= 20 : 데이터 타입이 flaot이라서 falsetest(c)
= 20 : 데이터 타입이 tuple이라서 false
isinstance(인스턴스, 데이터/클래스 타입)
- 첫 번째 매개변수 : 확인하고자 하는 데이터의 값, 객체, 인스턴스
- 두 번째 매개변수 : 확인하고자 하는 데이터의 타입, 클래스
- 반환 값 : 인스턴스와 타입이 같으면 True를 반환하고, 다르면 False를 반환
🖍 ① ㉠의존, ② ㉢일반화, ③ ㉡연관
public class Main {
public static void main(String[] args) {
int sum = 0;
try {
func();
} catch(NullPointerException e) {
sum = sum + 1;
} catch(Exception e) {
sum = sum + 10;
} finally {
sum = sum + 100;
}
System.out.print(sum);
}
static void func() throws Exception {
throw new NullPointerException();
}
}
🖍 101
throw new NullPointerException();
구문에 의해catch(NullPointerException e)
가 실행되고sum
은 1이 된다.finally
은 예외처리와 상관없이 실행되므로sum = 1 + 100
try catch
를 처리하는 방식:
try
블록 안에서 예외가 발생하면 그 순간에 코드 실행을 중단- 발생된 예외 종류가
catch
블럭의 안에 지정한 예외와 일치하면 그 안의 코드를 실행catch
블록 안의 코드가 모두 실행되면try catch
블록 넘어감
try
: 예외 발생을 조사하는 문장catch
: 예외가 발생했을 때 실행시킬 코드finally:
예외처리 발생여부와 상관없이 무조건 실행되는 구문
public class Annotation {
public static void main(String[] args) {
B b1 = new A();
A b2 = new A();
System.out.print(b1.getX() + b1.x + b2.getX() + b2.x);
}
}
class B {
int x = 3;
int getX() {
return x * 2;
}
}
class A extends B {
int x = 7;
@Override
int getX() {
return x * 3;
}
}
🖍 52
b1.getX()
= 7*3b1.x
= 3
B b1 = new A();
: 업캐스팅, A의 객체를 B 타입 변수에 저장b2.getX()
= 7*3b2.x
= 7
class Printer {
void print(Integer a) {
System.out.print("A" + a);
}
void print(Object a) {
System.out.print("B" + a);
}
void print(Number a) {
System.out.print("C" + a);
}
}
public class Generic {
public static void main(String[] args) {
new Container<>(0).print();
}
public static class Container {
T value;
public Container(T t) {
value = t;
}
public void print() {
new Printer().print(value);
}
}
}
🖍 B0
- 제네릭 T는 매개변수에 맞춰 타입을 변경해서 사용할 수 있게 하지만 T 자체의 type은 Object
// Printer 클래스는 파라미터에 따라 오버로딩되며, 해당되는 객체 형태에 따라 다르게 출력 됨. class Printer { void print(Integer a) { // Integer 타입을 인자로 받아 출력하는 메서드 System.out.print("A" + a); } void print(Object a) { // Object 타입을 인자로 받아 출력하는 메서드(모든 타입을 받을 수 있음) System.out.print("B" + a); } void print(Number a) { // Number 타입을 인자로 받아 출력하는 메서드 System.out.print("C" + a); } } public class Generic { public static void main(String[] args) { // Container라는 제네릭 클래스를 사용해서 Integer 타입을 가진 값을 전달하고 print() 호출 new Container<>(0).print(); } public static class Container<T> { // 제네릭 타입 T로 선언된 Container 클래스 T value; // T 타입의 value 변수 선언 public Container(T t) { // 생성자: 전달된 값을 value에 저장 value = t; } public void print() { // Printer 클래스의 print() 메서드를 호출 new Printer().print(value); // value를 Printer에 전달하여 print() 호출 } } }
- 0은
int
로Integer
로 바뀌는데(박싱) 타입 선언이 없다면, 제네릭 타입으로 들어가는 순간 컴파일 타임에서 타입이 소거됨- 이를 타입 소거라고 하며, 타입을 작성하지 않고 T로 하면 Object가 됨
Integer
타입으로 만들기 위해서는public static class Container<T> { Integer value; public Container(Integer t) { value = t; } // 또는 public void print() { new Printer().print((Integer)value); }
# include <stdio.h>
void func1(int** arr, int size) {
for(int i=0; i<=sizeof(arr); i++) {
*(*arr + i) = (*(*arr + i) + i) % size;
}
}
void func2(int* num, int* arr) {
*num = arr[*num % 4];
}
int main() {
int arr[] = {3, 1, 4, 1, 5};
int* p = arr;
int** pp = &p;
int num = 6;
func1(pp, 5);
func2(&num, arr);
printf("%d", num);
}
🖍 1
배열을 가리키는 포인터의 주소를 다시 포이터를 가리키는 포인터에 할당함.
arr[i] == *(arr+i)
func1(pp, 5);
int i=0
:
arr[0] = (arr[0]+0)%5 = (3+0)%5 = 3
arr={3, 1, 4, 1, 5}
int i=1
:
arr[1] = (arr[1]+1)%5 = (1+1)%5 = 2
arr={3, 2, 4, 1, 5}
int i=2
:
arr[2] = (arr[2]+2)%5 = (4+2)%5 = 1
arr={3, 2, 1, 1, 5}
int i=3
:
arr[3] = (arr[3]+3)%5 = (1+3)%5 = 4
arr={3, 2, 1, 4, 5}
int i=4
:
arr[4] = (arr[4]+4)%5 = (5+4)%5 = 4
arr={3, 2, 1, 4, 4}
func2(&num, arr);
num = arr[6%4] = arr[2] = 1
중앙 집중식 인프라 없이, 즉 사전 설정된 네트워크 기반 시설이 없이 구성된 자율형 네트워크를 의미합니다. 이러한 네트워크는 노드(주로 무선 장치)가 서로 직접 연결하여 통신하며, 군사 작전 중에 실시간으로 정보를 공유하기 위한 네트워크로 사용된다.
🖍 애드혹 네트워크(Ad-hoc network)
참고,