Java
연산자 우선 순위
구분 | 연산자 | 우선순위 |
단항 연산자 | ++ — + - ! ~ | 1 |
산술 연산자 | * / % | 2 |
산술연산자 | + - | 3 |
형 변환
형 변환은 서로 다른 타입 사이에 변환하는 작업 하는 것을 말한다.
기본 자료형 → 참조 자료형, 참조 자료형 → 기본 자료형 형 변환은 불가능하다.
범위가 작은 타입에서 큰 타입으로 형 변환 할 때는 문제가 생기지 않지만, 큰 타입에 작은 타입으로 형변환을 하면 문제가 생길 수도 있다.
자료구조
자료 구조는 데이터를 저장하기 위한 구조 이다.
대표적인 자료구조는 배열, List, Queue, Map, LinkedList 등이 있다.
기본 생성자
자바는 생성자를 만들지 않아도 자동으로 만들어지는 기본 생성자가 있다.
public class Test{
public Test(){}; // 생략되어 있음
}
클래스에 만약 생성자가 없다면 자동으로 기본 생성자를 만들어주는데, 생성자가 1개라도 있다면 기본 생성자는 생성되지 않는다.
자바의 생성자는 자바 클래스의 객체를 생성하기 위해 존재한다.
생성자에 리턴 타입이 없는 이유는 생성자의 리턴 타입은 클래스의 객체이기 때문이며, 클래스와 이름이 동일해야 컴파일러가 생성자인지 알 수 있기 때문이다.
Overloading
메서드의 이름은 같지만 리턴 타입, 매개변수 타입, 매개변수 순서가 다르면 다른 메서드로 인식한다.
즉, 메서드의 이름을 같도록 하고, 리턴 타입, 매개변수 타입과 매개변수의 순서를 다르게 하는 것을 오버로딩이라 한다.
메서드 오버로딩은 ‘같은 역할을 하는 메서드는 같은 메서드 이름을 가져야 한다’는 모토로 사용한다.
생성자도 매개변수에 따라서 다르게 인식된다. 이것도 오버로딩에 일종이다.
static 메서드 vs 일반 메서드
static 메서드는 static 변수만 사용할 수 있다.
static 변수는 클래스에서 공유하는 공통 변수가 된다.
인스턴스 변수는 클래스의 각 객체들이 가지고 있는 고유한 변수이다.
public class Test{
int y; //인스턴스 변수
static int x = 0; //static 변수
public static void method(){
this.y++; //불가
this.x++;
}
}
static 블록
static 블록은 객체가 생성되기 전에 한 번 호출된다. 즉 생성자 이전에 호출된다.
또한 객체를 여러개 생성해도, 최초 객체에서만 한 번 호출한다.
객체를 생성할 때만 호출되는 것이 아닌, 객체를 생성하지 않아도 객체의 static 변수에 참조를 하면 static 블록이 호출된다.
static 블록에서는 static 이 붙은 키워드(변수, 메서드)에만 호출할 수 있다.
Pass by Value, Pass By Referecne
pass by value 는 값을 전달 하는 것이고, pass by reference는 값의 참조를 전달하는 것이다.
Pass By Value는 값을 전달해도, 원본 값에 영향을 주지 않는다.
Pass By Reference는 값을 전달하면, 원본 값에 영향을 준다. 즉 값을 수정하면 원본의 데이터가 수정된다.
자바의 신에서는 기본 자료형은 Pass by Value이고, 참조 자료형은 Pass By Reference 라고 언급한다.
사실은 자바는 모두 Pass By Value 방식이다.
참조 자료형이 Pass By Reference처럼 동작하지만 엄연히 말하면 Pass By Value이다.
class Dog{
String name;
public Dog(String name) {
this.name = name;
}
public void changeDogName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\\'' +
'}';
}
}
class Main{
public static void main(String[] args) {
Dog dog = new Dog("바둑이");
System.out.println(dog);
changeDog(dog, "방울이");
System.out.println(dog);
newDog(dog, "쌍우리");
System.out.println(dog);
}
public static void changeDog(Dog dog, String name) {
dog.changeDogName(name);
}
public static void newDog(Dog dog, String name) {
dog = new Dog(name);
}
}
위의 코드를 보자.
- 바둑이라는 이름을 가진 Dog 객체를 선언한다.
- dog 를 print 한다.
- changeDog 메서드를 통해 dog의 이름을 방울이로 변경한다.
- dog를 프린트한다.
- newDog 메서드를 통해 새로운 Dog 객체를 할당하고, 쌍우리라는 개로 만든다.
- dog를 프린트한다.
자바가 만약 참조 자료형에 대해 Pass By Reference면 다음과 같은 결과가 나올 것이다
Dog{name='바둑이'}
Dog{name='방울이'}
Dog{name='쌍우리'}
하지만 실제 결과는 다음과 같다.
Dog{name='바둑이'}
Dog{name='방울이'}
Dog{name='방울이'}
즉 쌍우리 라는 새로운 Dog 객체로 변경했지만, 원본 객체에는 영향을 주지 않았다.
이것이 자바는 참조 자료형에도 Pass by Value 으로 동작한다는 증거이다.
Pass By Reference, 즉 참조에 의한 전달은 주소 값을 전달하면 실제 값에 대한 Alias를 구성함으로, 값을 수정하면 원본의 데이터가 수정되어야 한다.
하지만 새로운 객체를 할당해도 print는 방울이로 그대로 출력된다. 즉 원본 객체에 영향을 주지 못한다.
정리하면 매개변수로 Dog 객체가 전달될 때 Dog 객체가 복사되서 전달되는 것이다.
사실 참조형을 전달하면 전달되는 값 자체가 레퍼런스이다.
이것은 레퍼런스에 의한 전달과 똑같은 것은 아니다.
자바의 신 카페에도 이 부분을 지적한 사람이 있어 담당자가 글을 올려준듯 하다.
단순히 이해 시키기 위해서 저렇게 잘못 설명한건 잘못된 것이라고 생각된다.
Network
기본적인 네트워크 기기
- 라우터
- 레이어2 스위치
- 레이어3 스위치
위 네트워크 기기는 모두 데이터를 전송한다. 데이터 전송 처리는 다음 3단계로 이루어진다.
- 데이터 수신 : 전기신호 등을 물리적 신호로 변환된 데이터를 원래 디지털 신호(0,1)로 되돌린다.
- 데이터를 보낼 곳을 결정 : 데이터에 부가된 제어 정보를 참조하여 전송할 곳을 결정한다.
- 데이터 전송 : 데이터를 물리적인 신호로 변환해서 내보낸다. 필요하면 제어 정보를 고쳐 쓴다.
각 네트워크 기기의 차이는 두번째 단계의 차이이다. 즉, 데이터를 어느 곳에 보낼 지 결정하는게 각 기기의 차이이다.
인터페이스
각 기기에는 네트워크를 연결하기 위해 인터페이스가 갖춰져 있다.
이더넷 인터페이스가 가장 일반적으로 이용된다.
인터페이스는 포트라고도 불린다.
위와 같은 구멍이다.
전송 매체와 링크
기기에 달린 인터페이스끼리 링크를 한다고 가정하면, 인터페이스를 서로 연결하는 케이블을 전송 매체라고 할 수 있다.
전송 매체를 통해 데이터를 변환한 전기 신호 등 물리적인 신호가 전달된다.
전송 매체는 유선 뿐 아니라 무선 전파일 수도 있다.
이렇게 다양한 기기의 인터페이스를 전송 매체로 연결해 링크를 구성함으로 네트워크가 형성된다.
인터페이스는 무엇의 경계?
네트워크 인터페이스는 ‘0’, ‘1’의 디지털 데이터와 전기 신호와 같은 물리적 신호의 경계이다.
PC와 스마트폰 등 네트워크 기기가 다루는 0과 1의 디지털 데이터는 전기신호 등 물리적 신호로 변환되어 인터페이스에서 송출되고, 링크로 전달된다.
LAN의 주요 기술
LAN은 사용자가 직접 만드는 네트워크이다.
LAN을 구축하는 주요 기술은 다음과 같다.
- 이더넷
- 무선 LAN(Wi-Fi)
LAN 구축
사용자가 LAN을 직접 구축하려면, 이더넷 인터페이스가 있는 라우터와 레이어2, 레이어3 스위치 등의 네트워크 기기를 준비해야 한다.
위 기기들로 LAN 케이블로 연결해가면, 기기 사이에 링크가 구성되고, LAN이 만들어 진다.
무선 LAN은 무선 LAN 인터페이스를 갖춘 기기끼리 무선 LAN 링크를 만든다.
또한 무선 LAN와 유선 LAN 사이를 연결할 수도 있다.
네트워크 설계 프로세스
단순히 인터페이스끼리 연결해도 네트워크를 구축할 순 없다.
가정 네트워크처럼 소규모 네트워크에서는 가능하지만, 기업 네트워크에서는 불가능하다.
미리 구상을 해야되는데 이것을 네트워크 설계라 한다.
네트워크 설계는 4가지 단계로 나눠져 있다.
- 요건 정의 : 네트워크에 필요한 기능과 성능을 명확히 한다.
- 설계 : 요건 정의에서 결정한 요건을 만족할 수 있도록 구체적인 네트워크 구성을 결정
- 구축 : 설계한 네트워크를 바탕으로 기기의 배치, 배선, 필요한 설정을 한다.
- 운용 관리 : 네트워크가 정상으로 동작하도록 점검한다. 문제가 있으면 원인을 파악해 복구한다.
네트워크 구성도
네트워크를 설계하기 위해선 네트워크 구성도를 파악해야 한다.
논리 구성도
논리 구성도는 네트워크끼리 어떻게 연결되는지 나타낸다.
논리 구성도의 핵심은 몇 개의 네트워크가 어느 라우터와 레이어3 스위치로 연결되는지 파악하기 위해 쉽게 정리한 것이다.
물리 구성도
물리 구성도를 이용해 기기의 물리적인 배치와 각 기기의 인터페이스가 어떻게 연결되어 있는지 나타낸다.
핵심은 어느 기기의 어느 인터페이스가 어떠한 케이블로 배선되는지 파악하기 위해 쉽게 정리한 것이다.
물리구성도와 논리구성도의 대응
하나의 물리구성도에 대응하는 논리구성도가 하나뿐이라고 단정할 수 없다.
'Back-end' 카테고리의 다른 글
2023.08.02 TIL (0) | 2023.08.02 |
---|---|
2023.08.01 TIL (0) | 2023.08.01 |
2023.07.30 TIL (0) | 2023.07.30 |
2023.07.29 TIL (0) | 2023.07.30 |
2023.07.28 TIL (0) | 2023.07.28 |