본문 바로가기

2017/09

순환(RECURSION)의 개념과 기본 예제3 ※ 순환 알고리즘 설계(Design Recursion) 적어도 하나의 base case, 즉 순환되지 않고 종료되는 case가 있어야 된다. 모든 case는 결국 base case로 수령되어야 함. 암시적(implicit) 매개변수를 명시적(explicit) 매개변수로 바꿔라 - 암시적 변수와 명시적 변수? **일반적인 반복문을 이용해서 배열탐색을 할때 아래와 같은 방식으로 구현을 한다. 여기서 명시적 변수는 n,data,target이 되고 암시적 변수는 i가 된다.(변수 선언이 되어있지 않다.) public static int search(int n, int [] data, int target){ for(int i=0;iend){ return -1; }else if(target==data[begin]).. 더보기
순환(RECURSION)의 개념과 기본 예제2 ※ 순환적으로 사고하기(Recursive Thinking) - Recursion은 수학함수뿐 아니라 다른 많은 문제들도 해결 가능하다.(반복문) ※ 예제 - 글자 길이구하기 public class ex { public static void main(String[] args) { int iLength = getLength("hello"); System.out.println(iLength); } public static int getLength(String str){ if(str.equals("")){ return 0; }else{ return 1+getLength(str.substring(1)); } } } - 글자 거꾸로 출력하기(CASE1) public class ex { public static vo.. 더보기
순환(RECURSION)의 개념과 기본 예제1 ※ RECURSION? - 자기 자신을 다시 호출하는 메소드(재귀함수) - 무한루프에 빠질 수 있으므로 적어도 하나의 breaking point를 만들어준다. (Base Case) - recursion을 반복하다보면 결국 base case로 수렴해야 한다(Recursive Case) ※ 예제 - Factorial(n!) public class factorial { public static void main(String[] args) { int iResult = fn_factorial(5); System.out.println(iResult); } public static int fn_factorial(int n){ if(n==1){ return 1; }else{ return n*fn_factorial(n-.. 더보기
알고리즘의 분석, 공간 복잡도, 시간복잡도 ※ 알고리즘 분석 - 알고리즘의 실행 시간 및 기타 자원의 사용량을 분석 - 기타 자원으로는 메모리, 저장장치, 통신 등이 있다. - 알고리즘 분석에는 시간 복잡도(Time Complexity)와 공간 복잡도(Space Complexity)를 이용한다. - 주로 수행시간(시간 복잡도)을 분석한다. ※ 공간 복잡도 - 알고리즘을 실행하여 종료할때까지 필요한 기억장치의 크기 - 알고리즘과 무관한 부분 : 프로그램 코드를 저장하기 위한 공간, 프로그램을 수행하기 위해 시스템이 필요로 하는 공간 - 알고리즘과 밀접한 부분 : 문제를 해결하기 위해 필요한 공간 ex)변수를 저장하기 위한 공간 예제) 공간 복잡도의 계산 public int fn_abc(int a, int b, int c){ return (a+b+c.. 더보기
[자바] 클래스 ※ 클래스란? 객체지향 프로그래밍에서 로직과 데이터를 묶어놓은 하나의 단위 혹은 객체를 정의해놓은 것으로써 객체를 생성하는데 사용된다. ※ 클래스와 객체 위에서 말했듯 클래스는 객체를 생성할 때 사용된다. 가장 흔하게 사용되는 비유가 붕어빵과 붕어빵틀로 비유한다. 클래스는 붕어빵을 만드는 틀이고 그 틀에서 만들어진 붕어빵은 객체라고 한다. 아래 직접 코드로 예를 들어보자. ex) Cat yaOngE = new Cat(); Cat navi = new Cat(); Cat nyan = new Cat(); ... Cat이라는 클래스에 고양이에 관한 데이터, 메서드 들이 정의되어 있다. 이러한 클래스를 이용하여 세개의 고양이 객체(야옹이,나비,냥)를 만들었다. 즉 Cat이라는 클래스 안에 고양이에 대한 로직 데이.. 더보기
JVM(자바가상메모리)의 메모리구조 ※ JVM(자바가상메모리)의 메모리구조 이전 글에서 JVM은 운영체제에 상관없이 자바코드와 운영체제 사이에서 운영체제 맞게 변경시켜주는 역할을 한다고 했다. 하지만 이 외에도 응용프로그램이 실행되면 JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 용도에 따라 여러 영역으로 나누어 관리한다. 그 중 3가지 주요 영역이 있는데 메서드영역(Method Area), 힙(heap)영역, 스택(stack)영역이 있다. 메서드영역 (Method Area) JVM은 클래스파일(*.class)을 읽어서 분석하여 데이터를 이곳에 저장. 클래스에 관한 정보가 이 영역에 저장된다. 스택 (Stack) 메서드 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면 스택에 쌓이고 그 메서드가 끝나면 스택에.. 더보기
자바 API와 API 문서보는 법 ※ API (Application Programming Interface) 란? - 응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스 - Java SE(JDK)를 설치하면 자바시스템을 제어하기 위한 API를 제공 ※ API 문서 보는법 - 자바 플랫폼 위에서 동작하는 자바 애플리케이션을 개발하는 개발자들은 자바 API를 사용하게 된다. 하지만 자바 API의 종류는 방대하기 때문에 체계적으로 정리된 문서를 이용할 줄 알아야 한다. http://docs.oracle.com/javase/8/docs/api/index.html (자바 API 문서가 정리되어있는 웹사이트) System.out.println() 자바를 해봤으면 위의 메서드는 모두 사용해.. 더보기
자바(Java Programming Language)의 특징과 JVM ※ 특징 운영체제 독립적 - JVM(자바가상머신)이 운영체제마다 이해할 수 있는 형태로 변환하여 전달하기 때문에 자바로 작성한 코드는 운영체제와 하드웨어에 종속되지 않고 실행된다. 객체지향 언어 - 객체지향의 개념의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향언어라는 평가를 받고 있다. 자동 메모리 관리(Garbage Collection) - 가비지컬렉터(Garbage Collector)가 자동적으로 메모리를 관리해 준다. 만약 가비지컬렉터가 없다면 프로그래머가 사용하지 않는 메모리를 체크하고 반환하는 일을 수동적으로 해야한다. 네트워크와 분산처리를 지원 - 다양한 라이브러리(Java API)를 지원하여 네트워크 관련 프로그램 개발을 지원 멀티쓰레드 지원 - 멀티쓰레드 프로그램은 시스템과 .. 더보기