베르누이 분포
2020. 3. 9. 15:20
✏️ Mathemathics/Statistics and Probability
1. 정의 시행의 결과가 오로지 2가지 인 확률 분포 : 성공, 실패 베르누이 시행이 라고 불리는게 맞다 2. 예시 동전의 앞면, 뒷면 주사위의 2가 나올 시행, 나머지가 나올 시행 시행의 결과가 오직 2가지 뿐인 시행 : 베르누이 시행 3. 통계량 시행이 성공 했을 때의 확률변수는 1이고 실패 했을 때의 확률변수는 0이므로 E(x) = p V(x) = pq 4. 그래프
java - 상속과 생성자
2020. 3. 3. 11:13
📌 java/java
상속과 생성자 편리함을 위해서 어떠한 기능을 수용하면 그 기능이 기존의 체계와 관계하면서 다양한 문제를 발생시킨다. 그 문제를 한마디로 줄여서 말하면 복잡도의 증가라고 할 수 있다. 이번 시간에는 생성자가 상속을 만나면서 발생한 복잡성을 보여줄 생각이다. 그 맥락에서 super이라는 키워드의 의미도 중요하게 다뤄질 내용이다. 이번 수업을 이해하기 위해서는 기본 생성자의 성질에 대한 이해가 선행되야 한다. 아래의 예제를 보자. package org.opentutorials.javatutorials.Inheritance.example4; public class ConstructorDemo { public static void main(String[] args) { ConstructorDemo c = new ..
java - 상속
2020. 3. 2. 16:44
📌 java/java
상속이란? 객체지향을 통해서 달성하고자 하는 목표 중에서 가장 중요한 것은 재활용성일 것이다. 상속은 객체지향의 재활용성을 극대화시킨 프로그래밍 기법이라고 할 수 있다. 동시에 객체지향을 복잡하게 하는 주요 원인이라고도 할 수 있다. 상속(Inheritance)이란 물려준다는 의미다. 어떤 객체가 있을 때 그 객체의 필드(변수)와 메소드를 다른 객체가 물려 받을 수 있는 기능을 상속이라고 한다. 부모와 자식의 관계에 따른 비유를 들을 수도 있지만, 비유는 얻는 것보다 잃는 것이 많기 때문에 구체적인 코드를 통해서 상속을 알아보자. A extends B : A는 B를 확장한다 자식객체 extends 부모객체 subclass extends superclass derived class extends base ..
유전자가위 원리와 개발과정- 크리스퍼(CRISPR-Cas9, Cpf1)
2020. 2. 28. 17:55
🧬 Bio/생명공학
유전자가위(Genetic Scissors) 또는 분자가위(molecular scissors)란 생체의 특정 부위에 인공효소를 집어넣으면 세포 속 유전자의 특정 염기서열을 인식하여 원하는 대로 자르고 편집하는 기술을 일컫는 말이다. 쉽게 설명하자면 옷이 찢어졌을 때 찢어진 부분만 도려내고 새로운 천으로 바꿔치기 하는 "유전자 짜깁기" 기술로 인간이나 동식물 세포의 유전체를 교정하는 데 사용할 수 있다. ●유전자가위의 필요성과 탄생 배경 질병을 치료하는 방법에는 일반적으로 약물치료와 외과적 수술이 있다. 그러나 유전자 돌연변이에 의해 발생하는 유전질환의 경우 약물과 수술은 근본적인 치료방법이 될 수 없다. 이런 유전질환을 원천적으로 치료하는 방법을 유전자치료(gene therapy)라고 한다. 1990년대에..
java - 생성자(constructor)
2020. 2. 28. 17:54
📌 java/java
회사에 출근해서 업무를 시작하기 전에 제일 먼저 하는 일이 아마 책상 정리일 것이다. 커피를 내리는 경우도 있을 것이고, 컴퓨터 부팅을 시작하기도 할 것이다. 즉 어떤 일을 시작하기 전에 준비를 하게 되는데 이것을 다른 말로 초기화라고 한다. 객체 지향 프로그래밍도 초기화에 해당하는 기능이 제공되는데 이것을 생성자(constructor)라고 한다. 앞에서 살펴봤던 계산기 예제를 보자. 객체를 이용하기 위한 로직은 아래와 같다. 위의 예에서 메소드 setOprands의 값으로 10과 20을 지정했다. 이 값들은 객체 내부에서 인스턴스 변수 left와 right의 값으로 설정되어서 유지된다. 그런데 이 객체를 이용하기 위해서는 기억해야 할 것이 있다. 아래와 같이 메소드 setOprands를 호출하기 전에 ..
java - 유효 범위
2020. 2. 26. 17:59
📌 java/java
변수와 메소드 같은 것들을 사용할 수 있는 것은 이름이 있기 때문이다. 아래 코드에서 left는 변수의 이름이고, sum은 메소드의 이름이다. 프로그램이 커지면 여러 가지 이유로 이름이 충돌하게 된다. 이를 해결하기 위해서 고안된 것이 유효범위라는 개념이다. 흔히 스코프(Scope)라고도 부른다. 메소드, 클래스와 같은 개념들이 등장한 배경은 프로그램을 만드는 데 사용하는 코드의 양이 기하급수적으로 증가하면서 직면하게 되는 막장을 극복하기 위한 것이었다. 거대해진 코드를 효율적으로 제어하지 못한다면 웅장한 소프트웨어를 만드는 것은 점점 불가능한 일이 될 것이다. 유효범위라는 것도 그러한 맥락에서 등장한 개념이다. 하지만 유효범위는 메소드나 클래스처럼 특별한 문법적인 규칙을 가지고 있는 것은 아니다. 오히..
java - 클래스 멤버와 인스턴스 멤버
2020. 2. 25. 18:41
📌 java/java
맴버(member)는 영어로 구성원이라는 뜻이다. 객체도 구성원이 있는데 아래와 같다. 변수 메쏘드 객체를 만들기 위해서 우선 클래스를 정의하고, 클래스에 대한 인스턴스를 만들었다. 복습을 해보자. 이전 시간에 살펴봤던 예제 CalculatorDemo.java에서 left와 right 변수는 누구의 멤버일까? 인스턴스의 멤버다. 인스턴스를 만들어야 사용할 수 있었고, 인스턴스마다 서로 다른 값을 가지고 있기 때문이다. 그렇다면 클래스도 맴버를 가질 수 있다는 것일까? 아래 그림과 같이 클래스도 맴버를 가질 수 있다. 그 방법을 알아보는 것이 이번 수업의 목표다. 인스턴스 소유의 변수가 아니고 클래스 소유의 변수가 존재한다. 클래스 소유의 변수와 인스턴스 소유의 변수는 다른 특성을 가지고 있다. Calcu..
java - 클래스와 인스턴스 (2020/02/20)
2020. 2. 20. 15:52
📌 java/java
메쏘드를 이용하면 메쏘드를 안 썼을 때 보다 유지보수의 편의성이 높아진다. 연관되어있는 코드를 묶어놨기 때문에 이코드를 보는 사람들의 가독성이 향상된다. 어떻게 하면 이 데이터라는 변수로 상징되는 데이터와 연산으로 상징되는 메쏘드를 서로 연관되어 있는 것들끼리 그룹핑 할것인가? -> 해서 만들어진 것이 객체지향 프로그래밍이다. 코드가 복잡해짐에 따라서 버그는 많아지고, 팀웍은 서서히 깨지기 시작할 것이다. 여러분이 언어의 설계자라면 이런 상황을 완화하기 위한 고민을 시작할 것이다. 이런 맥락에서 객체 지향이라는 개념이 등장하기 시작하는 것이다. 객체 지향은 많은 선배 프로그래머들에 의해서 만들어졌기 때문에 다양한 의도가 반영된 프로그래밍 패러다임이다. 그래서 객체 지향이 만들어진 동기를 하나의 케이스로 ..
java - 객체지향프로그래밍
2020. 2. 19. 22:51
📌 java/java
객체지향 프로그래밍(Object-Oriented Programming)은 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것이다. 이 객체들을 마치 레고 블럭처럼 조립해서 하나의 프로그램을 만드는 것이 객체지향 프로그래밍이라고 할 수 있다. 다시 말해서 객체지향 프로그래밍은 객체를 만드는 것이다. 따라서 객체지향 프로그래밍의 시작은 객체란 무엇인가를 이해하는 것이라고 할 수 있다. 말이 어렵게 느껴지지 않는가? 그것은 아직 객체 지향에 대한 체험이 없기 때문이다. 본 수업에서는 객체 지향에 대해서 코드 없이 이야기 할 수 있는 것들에 대해서만 이야기 할 생각이다. 객체 지향에 대한 오리엔테이션이라고 생각하고 가벼운 마음으로..
java - 앱이 실행중에 입력 받기 (2020/02/14)
2020. 2. 14. 22:11
📌 java/java
이번에는 자바앱이 실행되고 있는 동안에 사용자의 입력을 받는 법을 알아보자. 자바에서 기본적으로 제공하는 라이브러리 중에 scanner을 이용하면 쉽게 사용자의 입력을 잡을 수 있다. 안타깝게도 우리는 아직 라이브러리나 패키지와 같은 개념을 배우지 않았다. 아직은 이 로직을 샅샅이 이해하는 것은 무리이기 때문에 입력을 받는 방법에 대한 전체적인 흐름을 파악하는데 집중하자. package org.opentutorials.javatutorials.io; import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int i = sc.ne..
java - 입출력 (2020/02/14)
2020. 2. 14. 21:28
📌 java/java
public static void main(String[] args) String : 문자열 [] : []이 열리고 바로 닫혔다? 이것은 문자열을 담을 수 있는 배열이다 라는 뜻이다. args : args라는 이름을 가지고 있는 변수를 정의할 것인데 그 변수는 문자열의 데이터 타입을 담을 수 있는 배열이다. main이라는 함수의 parameter이다. void : 출력값이 존재하지 않는다 package org.opentutorials.javatutorials.io; class InputDemo{ public static void main(String[] args){ System.out.println(args.length); } } java InputDemo one two three; cmd에 이렇게 치면..
프레임 워크란?
2020. 2. 11. 12:01
📌 WorkOut
========================================================================== GoF의 디자인 패턴으로 유명한 랄프 존슨(Ralph Johnson) 교수는 프레임워크를 "소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것" 이라고 정의하였다. 프레임워크는 라이브러리와 달리 애플리케이션의 틀과 구조를 결정할 뿐 아니라, 그 위에 개발된 개발자의 코드를 제어한다. 프레임워크는 구체적이며 확장 가능한 기반 코드를 가지고 있으며, 설계자가 의도하는 여러 디자인 패턴의 집합으로 구성되어 있다. ========================================================..
java - 입출력
2020. 2. 10. 21:36
📌 java/java
매개변수와 인자 메소드의 입력 값은 매개변수(parameter)를 통해서 이루어진다. 위의 예제를 조금 개선해보자. 이전 예제는 0부터 9까지의 숫자를 화면에 출력했다. 만약 필요에 따라서 0부터 4까지 출력하고 싶거나 0부터 8까지 출력하고 싶다면 어떻게 해야 할까? 각각에 맞는 메소드를 새로 정의해야 할까? 그렇게 해도 되지만 더 좋은 방법이 있다. 입력 값에 따라서 다른 출력 값을 갖도록 메소드를 정의하면 된다. 즉, 입력을 고민할 때가 된 것이다. 아래의 예제를 보자 package org.opentutorials.javatutorials.method; public class MethodDemo4 { public static void numbering(int limit) { int i = 0; wh..
java - 배열 (2020/02/08)
2020. 2. 8. 16:04
📌 java/java
배열(Array)은 연관된 정보를 그룹핑 하는데 사용한다. classGroup은 배열은 문자열의 데이터 타입의 형식을 가진 데이터들을 저장한다. String[] 변수를 정의하는 것 package org.opentutorials.javatutorials.array; public class GetDemo { public static void main(String[] args) { String[] classGroup = { "최진혁", "최유빈", "한이람", "이고잉" }; System.out.println(classGroup[0]); System.out.println(classGroup[1]); System.out.println(classGroup[2]); System.out.println(classGro..
java - while문, for문 (2020/02/07)
2020. 2. 7. 22:43
📌 java/java
while 문 package org.opentutorials.javatutorials.loop; public class WhileDemo { public static void main(String[] args) { int i = 0; // i의 값이 10보다 작다면 true, 크다면 false가 된다. 현재 i의 값은 0이기 때문에 이 반복문은 실행된다. while(i
java - 논리연산자 (2020/02/07)
2020. 2. 7. 21:13
📌 java/java
논리 연산자 조건문 수업에서 Boolean에 따라서 프로그램이 다르게 동작하도록 하는 방법을 배웠다. 이번 시간에는 Boolean의 값을 결합해서 코드를 좀 더 간결하게 만들 수 있는 논리 연산자(Conditional Operator)에 대해서 알아보자. 뒤에서는 조건문 수업의 예제에 논리 연산자를 결합해 볼 것이다. && &&는 좌항과 우항의 값이 모두 참(true)일 때 참이 된다. And라고 읽는다. 다음 예제를 보자. package org.opentutorials.javatutorials.conditionaloperator; public class AndDemo { public static void main(String[] args) { if (true && true) { System.out.pr..