공부 102

네트워크 경로와 가상 디렉토리

네트워크 경로네트워크를 통해서 접근 가능한 경로를 말한다.\\서버이름\공유이름\폴더 와 같이 표기하며, 이때 실제 경로는 해당 서버 -> 공유 이름 폴더 -> 폴더 로 이어진다.이때 해당 네트워크 경로로 접근 가능한 사용자는 윈도우의 특정 사용자 또는 그룹으로 지정 가능하다. 가상 디렉토리실제 파일 시스템의 폴더를 서버에서 다른 경로로 지정하는 기능이다. D:/서버 폴더/data 라는 디렉토리가 있다고 가정하자. 원래라면 서버가 작동하는 컴퓨터 내부에 서버 폴더가 있고, 그 하위에 data 라는 폴더가 있을 것이다.이때 data 를 가상 디렉토리로 설정하여 C:/새폴더 로 매칭시키면, 서버가 자신 하위의 /data 로 접근할때, 실제로는 /data가 진짜 매칭된 위치, 즉 C드라이브 내부의 새폴더로 매칭..

공부 2024.12.11

(5) C# 기초 문법 - 연산자 오버로딩, foreach, 이터레이터, 가변배열 등

1. 연산자 오버로딩C#에서는 +, -, /, *, % 와 같은 연산자를 오버로딩 할 수 있다. 이를 이용하면 기본형이 아니여서 계산이 안되는 타입 역시 계산하는 것처럼 표현할수 있다. 객체를 선언하지 않고 일반 연산자처럼 사용하기 위해서 static 으로 선언해두는 것이 좋다.public [static] 반환타입 operator [+, -, /, *, %] (매개변수1, 매개변수2) {}이런 식으로 선언할 수 있다.class Car{ public string name; public string maker; public Car(string name, string maker) { this.name = name; this.maker = maker; } ..

공부/C# 2024.10.17

(4) C# 기초 문법 - 프로퍼티(속성), 인덱서

1. property(프로퍼티/ 속성)자바에서는 get/set 함수를 이용해 속성값을 바꾸거나 조회한다. 이를 좀 더 쉽게 구현하도록 만든 것이 프로퍼티라고 할 수 있다.클래스 내부, 메서드 바깥에    public  [반환 형식] 프로퍼티 이름 {get; set; }형식으로 선언한다. 이때 프로퍼티 이름은 속성 이름이나 논리적으로 속성을 나타내는 이름이 좋다.class Car{ private int wheelVar; public int Wheel{ get{ return wheelVar;} // 조회할때 자동 호출 set{ wheel = value; } // 대입할때 자동 호출 }}이런 식으로 선언하면 자동으로 프로퍼티를 조회하거나 호출할때 호출된다..

공부/C# 2024.10.16

(3) C# 기초 문법 - readonly, out, ref, 가변길이 매개변수 등

1. readonly 필드읽기 전용 필드. const 와 차이점은 선언시 초기화하지 않아도 된다. 다만, 한번이라도 초기화되어 값을 갖고 있으면 변경 불가능한 것은 같다.2. out 매개변수반환형 매개변수. 초기화 되지 않은 매개변수를 메서드에 전달하기 위한 키워드. 이때 해당 값을 의미있게 사용하고자 하면 메서드 내부에서 초기화해줘야 한다.public void TestMethod(out int num){ ... // out int 형식의 매개변수를 받는 메서드}static void Main(){ int num; TestMethod(out num); // 초기화되지 않은 매개변수 전달} 3. ref 매개변수참조 전달 방식. 기본형의 변수들은 메모리에 값을 저장하는 방식으로 저장됨. ..

공부/C# 2024.10.16

(2) C# 기초 문법 - namespace, 클래스, 구조체, static, 접근 제한자 등

1. namespace자바의 패키지와 대응되는 개념.namespace 이름 {}  형식으로 선언하며, 네임스페이스만 다르면 같은 이름의 클래스를 선언해도 충돌이 일어나지 않는다. using 지시문을 통해 외부 네임스페이스의 코드를 불러올수 있다. 2. 클래스class 이름 {} 형식으로 선언한다.  3. 구조체데이터를 하나의 이름으로 묶어 관리하는 역할을 한다. 힙이 아닌 스택 영역에 저장된다.struct 이름 {} 형식으로 선언한다. 4. 접근 제한자class, 변수, 인터페이스 등에 붙일수 있다.private: 같은 클래스 내부에서만 사용 가능.protected : 같은 클래스 내부, 또는 상속받는 자식 클래스 내부에서만 사용 가능.protected internal : 같은 어셉블리(dll 파일) 내..

공부/C# 2024.10.16

(2) C# 기초 문법 - 기본형, 변수, 상수, 문자

C#의 시작이 java 인 만큼, java 와 유사한 점이 많다.그렇기에 이 글에서는 c#의 세부적인 내용까지 모두 말하기보단, java와의 차이점을 중점에 두고 C# 만의 차별점을 말하고자 한다. 1. 다수의 변수 선언 및 초기화int a=b=c=d=10;C# 에서는 이런식으로 여러 변수를 한번에 선언과 동시에 초기화하는 것이 가능하다. 2. 상수const NAME = "홍길동";상수를 선언할때는 final 예약어 대신 JS처럼 const 를 사용한다. 3.  문자열string line = @"\안녕하세요\ 반가워요"이렇게 앞에 @를 붙이고 문자열을 적으면 공백, 특수 기호를 포함하여 문자열을 그대로 저장한다. 출력결과: \안녕하세요\                   반가..

공부/C# 2024.10.16

(1) C# 이란?

1. C#과거 마이크로소프트에서 JAVA 를 사용해서 개발했다. 그러나 MS 에서 자신들의 사정에 맞춰 JVM 에 기능을 추가했고, 이에 당시 JAVA 를 소유하고 있던 썬 마이크로 시스템즈에서 소송을 걸어 새롭게 만든 언어다.역사가 역사인 만큼 문법과 작동 방식 등이 JAVA 와 유사한 점이 많으며, java 보다 더 개발자 편의에 맞춰 발전시킨 부분도 존재한다.  2. .NET마이크로소프트에서 만든 개발 및 실행 환경이다.FCL(Framework Class Library)라는 이름의 공용 라이브러리와 CLR(Common Language Runtime) 이라고 불리는 VM(가상 머신) 이 합쳐진 것이다.C#, F#, VS 등의 언어로 작성된 코드는 컴파일되면 마이크로소프트사의 중간 언어로 변환되는데, ..

공부/C# 2024.10.16

IO 와 NIO 를 이용한 입출력 (2/2)

NIO자바 4에서 새롭게 등장하고 7에서 재정비된 NIO 는 IO 와 비교해 여러 강점을 가진다. 1. MMIO(Merory-Mapped IO) 방식으로 버퍼 지원2. 넌블로킹 모드 지원3. Scatter/Gather 지원4. 파일락 이전 포스팅에 1,2,3, 의 내용이 정리되어 있다. 파일락의 경우, 어떤 파일을 수정하는 동안 다른 쓰레드에서 읽기 작업을 가능하게 할지 설정하는 기술이다. MMIO일반적으로 I/O 작업이 이뤄질때, 이를 위한 별도의 메모리 공간이 할당된다. 문제는 I/O 작업이 일어날 때마다 이 별도의 메모리 공간(자바에서는 Heap)을 사용하기 위한 시스템콜이 일어나고, 이 작업이 상당한 자원을 소모한다는 것이다.이 문제를 해결하기 위해 운영체제는 MMIO 라는 기술을 지원한다.mmi..

공부/java 2024.05.17

IO 와 NIO 를 이용한 입출력 (1/2)

자바에는 입출력을 위한 I/O API 존재한다.I/O 클래스는 두개가 존재하는데, 기존 I/O 와 자바4에 등장해서 자바 7에 재정리된 버퍼를 사용하는 New I/O 다. 버퍼버퍼에 대해 쉽게 이해하기 위해 먼저 마트에서 장을 본다고 가정해보자. 살 물건을 하나씩 계산대로 가지고 가기 보다는, 바구니에 담아서 한번에 가져가는 것이 이동시간도 적게 걸리고 힘도 덜 들 것이다. 버퍼는 바로 이 바구니와 비슷한 역할을 한다. 즉, 데이터를 다루기 전 일정 크기만큼 한번에 가져와 가지고 있는 저장소다. 덕분에 데이터를 사용하기 위해 매번 데이터를 찾으러 갈 필요가 없어 실행 시간이 빨라진다는 장점이 있다. 기본 I/O 클래스를 이용한 버퍼코드로 살펴보기에 앞서 일부 세팅이 필요하다.1. 더미 파일 생성파워쉘에서..

공부/java 2024.05.13

자바 - Junit5 Jupiter 를 이용한 단위 테스트 시작

1. 프로젝트의 main 폴더 아래에 test 폴더를 만든다. test 폴더 내부에 테스트 클래스를 만들지 않으면 정상적으로 junit 클래스를 import 해올수 없어 테스트 코드를 실행할수 없다. 2. @Test 어노테이션을 이용한 테스트 코드 메서드 작성 @Test void test(){ } 해당 어노테이션이 붙은 메서드는 main 클래스처럼 실행이 가능해진다. main 클래스가 그렇듯, 반환값은 존재하지 않는다. **** 만약 @Test 어노테이션의 import 클래스가 org.junit.jupiter.api.Test 가 아니라면 라이브러리를 추가해야 한다. gradle의 경우 다음의 코드를 작성해줘야 한다. dependencies { testImplementation 'org.junit.jupi..

공부/java 2024.04.03