세상에 이상을 더하다.

지금, Rooti와 함께라면.

Rooti는 상상을 만드는 공방입니다.

Lecture 24

은밀하게.. 정보 은닉과 접근 제어자

왜 필요한가? 학생의 신분으로 뭘 알겠나? 솔직히 필자도 정보 은닉의 중요성을 하나도 알지 못한다. 그러나 너무나 당연한 건 게임, 애플리케이션등과 같은 프로그램들 그리고 여러 사이트들은 보안이 중요하다는 것이다. 메모리에 올라가 있는 여러 변수들이 외부에서 너무나도 쉽게 읽히고 바뀐다면 많은 문제가 생기는 게 당연하다. 물론 어떻게 다른 변수에 접근하는지 그 방법은 나도 아직 잘 모르지만, 안전하게 보안을 철저히 해 두는것이 좋지 않은가... 접근 제어자 자바에는 크게 세 개의 접근제어자로 나눌 수 있고 아무런 제어자를 안 적을 수도 있다. 접근 제어자 설명 public 외부 클래스 어디에서나 접근 가능 protected 같은 패키지 내부와 상속 관계의 클래스에서만 접근 가능, 그 외 클래스에서는 접근..

Lecture/Java 2023.01.25

연속성의 정의와 관련 정리들의 증명 총정리

함수 f가 a에서 연속임은 다음과 같이 정의됩니다. 이 정의는, f가 a에서 연속이기 위해서 다음 세 조건이 요구됨을 알려줍니다. f(a)가 정의된다.(a가 f의 정의역에 속한다.) x가 a로 접근할 때의 f(x)의 극한값이 존재한다. 1에서의 f(a)가 2에서의 극한값과 같다. 한편, 한쪽 방향의 극한값만이 함숫값과 같다면, 그 방향으로만 연속입니다. 다시 말해, 위와 같이 우극한이 f(a)와 같다면, 'f는 a에서 오른쪽으로부터 연속이다'라고 말합니다. 좌극한이 같다면, 왼쪽으로부터 연속이겠죠. 물론 좌극한과 우극한이 같으면 완전히 연속입니다. 그렇다면 어떤 구간에서 f가 연속임은 어떻게 정의될까요? 간단하게, 구간 내의 모든 점에서 연속이면 f가 그 구간에서 연속이라고 합니다. 열린구간이면 문제될 ..

Lecture/Calculus 2023.01.25

평균값 정리 증명 (Mean Value Theorem)

평균값 정리는 순간변화율과 평균변화율을 매듭지으며, 다시 말해 도함수와 원시함수를 매듭짓습니다. 이는 수학적으로 의미가 큽니다. 실제로 다음번에 다룰 미적분학의 기본정리의 증명에서도 평균값 정리가 쓰입니다. 평균값 정리의 내용은 다음과 같습니다. 한글로 표현하자면 다음을 의미합니다. 함수 f가 닫힌구간 [a, b]에서 연속이며, 열린구간 (a, b)에서 미분가능하면 이를 만족하는 c가 (a, b)에 존재한다. 물론 양변에 b-a를 곱해 다르게 표현하면, f'(c)(b-a)=f(b)-f(a)를 만족하는 c가 (a, b)에 존재하는 것과도 같죠. 그럼 롤의 정리를 사용해 평균값 정리를 증명해보겠습니다. 점 A를 (a, f(a)), 점 B를 (b, f(b))라고 두겠습니다. 그러면 직선 AB의 방정식은 아래와..

Lecture/Calculus 2023.01.24

롤의 정리 증명 (Rolle's Theorem)

롤의 정리는 증명이 간단하면서도 평균값 정리나 로피탈의 정리 등 다양한 정리들의 증명에 잘 사용되니 알아두시면 유용하리라 기대됩니다. 롤의 정리의 증명에는 페르마의 정리가 사용되는데, 이것은 이전 글에 증명해 두었습니다. 롤의 정리는 다음과 같습니다. 즉, 함수 f가 다음 세 조건을 만족할 때, f가 닫힌구간 [a, b]에서 연속이고 f가 열린구간 (a, b)에서 미분가능하며 f(a) = f(b). f'(c)=0을 만족하는 c가 열린구간 (a, b)에 존재한다는 의미입니다. 세 가지 경우로 나누어서 증명하겠습니다. 1. f(x) = k, 상수일 때 (f가 상수함수일 때) 열린구간 (a,b) 전체에서 f'(x)=0이므로, c에는 구간 내의 아무 값이나 가져와도 롤의 정리에 부합합니다. 2. 열린구간 (a,..

Lecture/Calculus 2023.01.23

페르마의 정리 증명 (Fermat's Theorem) + 최대, 극대, 임계값의 개념

페르마의 정리는 다음 글에 설명할 롤의 정리의 증명에 사용되며, 롤의 정리는 다시 미적분학에서 매우 중요한 정리 중 하나인 평균값 정리(MVT)의 증명으로까지 이어집니다. 따라서 이번 글에서 페르마의 정리의 증명을 다루겠습니다. 페르마의 정리는 위와 같습니다. f가 c에서 극댓값 혹은 극솟값을 가지며 f'(c)가 존재할 때, 그때의 f'(c) 값이 0이라는 뜻입니다. 이를 증명하기 이전에 극대/극솟값의 정의를 먼저 살피고, 페르마의 정리의 증명에 이용되는 최대·최소 정리까지 살펴봅시다. 먼저 최댓값과 최솟값(absolute maximum/minimum)은 말 그대로 함수의 정의역 전체에서 가장 크고 작은 값을 의미합니다. Calculus에서는 위와 같이 설명하고 있습니다. D는 정의역입니다. 정의역에 속..

Lecture/Calculus 2023.01.23

극한 법칙의 엄밀한 증명(엡실론-델타 논법) - 합과 차의 법칙

Calculus에서 가장 먼저, 기본으로 다루어지는 극한 법칙 다섯 가지 중 합과 차의 법칙(1, 2)를 이번 글에서 증명하도록 하겠습니다. 위 이미지에서 언급되었듯, x가 a로 접근할 때의 f(x)와 g(x)의 극한값은 존재한다고 가정합니다. 아래 증명에서는 이 극한값을 각각 F, G라고 하겠습니다. 1. 합의 법칙 위 두 줄은 'x가 a로 접근할 때의 f(x)와 g(x)의 극한값이 각각 F와 G'라는 전제를 엡실론-델타 논법으로 표현한 것입니다. 이미 가정한 내용이므로 이는 성립합니다. 혹여나 일러두자면, ∀은 '모든 ~에 대해', ∃은 '존재한다.', s.t.는 '다음을 만족하는' 이라는 뜻입니다. 이제 모든 양의 실수 ε에 대해 δ를 다음과 같이 채택하겠습니다. min은 최소함수입니다. 즉, δ을..

Lecture/Calculus 2023.01.23

생성자( Constructor ), 변수 유효 범위

전에 배운 선언과 동시에 인스턴스화를 할 때 어떻게 하였는가? 생성자의 개념 그런데 뒤에 (클래스명) ( ); 이게 무엇일까? 메서드 같기도 하고.. 그런데 클래스명과 같은 이름을 가지는 메서드인가?? 이것이 지금 배울 '생성자'라는 것이다. 생성자란 클래스를 생성할 때 사용하는 Person(), Burger()과 같은 메서드를 의미하고 이들이 하는 일은 클래스를 처음 만들 때 멤버 변수를 초기화하는 것이다. 변수 유효 범위 이번 기회에 변수 유효 범위에 대해서도 알아보면 되겠다 ^^ 디폴트 생성자( Default Constructor ) Person(), Burger() 와 같이 괄호 안에 아무것도 넣지 않은 생성자를 디폴트 생성자라고 한다. 정확히 말하면 각 클래스에 생성자에 관한 내용을 아무것도 적..

Lecture/Java 2023.01.23

도트 연산자 (dot operator)

도트 연산자 우선 우리가 저번에 만든 인스턴스들에 값을 집어넣는 방법을 코드로 보자. (Class 이름) (참조변수 이름) = new (Class 이름) (); 을 통해서 선언 밑 초기화를 하고 각 클래스들이 들고 있는 멤버 변수(인스턴스 변수)에 어떤 값을 집어넣기 위해 (클래스명) ' . ' (변수명)을 하는 것을 볼 수 있다. (멤버변수라는 용어는 변수 유효 범위 파트에서 설명할 것이다.) 이때 ' . ' 가 도트 연산자이며 간단하게 그 인스턴스의 변수 혹은 메서드에 접근하기 위함이라고 이해하면 된다. 각 인스턴스들이 가지고 있는 멤버변수 임이 중요하다.

Lecture/Java 2023.01.23

버블 정렬 (코드업 1441: 버블 정렬)

버블 정렬 알고리즘은 매우 비효율적이며 시간이 오래 걸리는 알고리즘이지만, 이해하기 쉽고 직관적이어서 첫 번째로 가져왔습니다. 버블 정렬을 헝가리 무용으로 표현한 영상입니다. 오름차순으로 정렬하려는 상황을 생각하겠습니다. 1번째와 2번째 원소를 먼저 비교합니다. 2번째 원소가 1번째 원소보다 더 크면 서로를 바꿉니다. 2번째와 3번째, ... n-1번째와 n번째까지 계속 이것을 수행합니다. 이 과정을 시행 1회라고 부르겠습니다. 그리고 위 시행을 n번 반복하면 됩니다. 하지만, 횟수를 더 줄이려면, 1번째 시행에서는 n번째까지, 2번째 시행에서는 n-1번째까지, ... , n-1번째 시행에서는 2번째까지만 탐색(크기 비교 및 교체)해도 됩니다. 왜냐하면, 버블 정렬은 앞에서부터 차례대로 연속된 두 원소를..

Lecture/Algorithm 2023.01.21

알고리즘 : 문제를 해결하는 가장 좋은 방법이 무엇일까

Introduction 알고리즘은 문제를 해결하기 위한 일련의 절차를 의미합니다. 특히 컴퓨터과학에서 많이 쓰이는 용어이기도 하죠. 프로그래밍에서의 알고리즘은 대개 일반화된 문제들에 대해 이미 정형화되어 명명된 절차를 일컫습니다. 어떤 문제를 해결할 수 있는 알고리즘이 여러 개 있을 수 있고, 또 하나의 문제를 해결하는 데에 여러 알고리즘이 쓰이기도 합니다. 문제에 대응하는 적합한 알고리즘의 선택은 연산 시간을 획기적으로 단축해 주거나 혹은 문제에 대한 해답의 정확도를 높여주기도 합니다. 지금부터 이 강의에서는 이들의 매커니즘을 소개하고 실제 코드를 통해 풀어내 보려 합니다. 온라인 프로그래밍 저지 사이트(백준, 혹은 코드업)의 문제를 예제로 참조하겠습니다.

Lecture/Algorithm 2023.01.21