Recursive 모든 함수는 기본적으로 스택 프레임을 가진다. 스택 안에는 매개변수, 지역변수, 복귀 주소 등을 가지고 있다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Main main = new Main(); int n = 3; main.solution(n); } public void solution(int n) { if (n==0) return; else { System.out.print(n +" "); // [출력] 3 2 1 solution(n-1); System.out.print(n +" "); // [출력] 1 2 3 } } } 스택에 계속 쌓이면서 solut..
Primitive Type 기본 자료형 : 메모리에 실제 값을 갖는 자료형 논리형 : boolean , 문자형 char, 정수형 (byte, short, int , long) , 실수형 (float, double) Non-Primitive Type 참조 자료형(비기본 자료형) : 실제 값이 아닌 객체의 주소를 갖고 있는 자료형 객체의 주소에 의해 참조 되며, new 키워드를 통해 생성된다. 클래스 (String, Integer 등), 인터페이스 (Collection, Map) 등, 배열 String fruit = "Apple"; fruit.toUpperCase(); 기본 자료형에는 String이 없다. 그래서 fruit은 인스턴스로 부르는게 맞지만, 자주 사용하기 때문에 변수명으로 부르기도 한다. (to..
정규 표현식 Regular Expression 특정한 규칙을 가진 문자열의 집합 JDK 1.4부터 제공 검색 ^ : 문자열 시작부터 $ : 문자열 종료까지 . : 줄바꿈을 제외한 임의의 한 문자 *: 바로 앞에 문자가 없거나 하나 이상 있을 때 +: 바로 앞에 문자가 하나 이상 있을 때 [^] : ^ 이후의 괄호안 형식을 제외한 문자 [] : []안의 형식을 일치하는 문자열 {} : {} 앞의 문자열의 반복 개수 - ab{2,} : 2개 이상, ab{1,2} : 1부터 2까지 ( ) : () 안의 내용을 하나의 묶음으로 처리 | : OR 연산 [0-9] : 0~9 숫자, [a-z A-Z] : 모든 알파벳, [ㄱ-ㅎ|ㅏ-ㅣ|가-힣] : 모든 한글 \s : 모든 공백 문자, \S : 공백 문자 제외, \d ..
Collection Framework 값들을 담아주는 형태 - NonPrimitive 타입만 저장이 가능 Primitive 형을 Wrapper 클래스를 통해 Boxing - Integer Collection(List, Set), Map 으로 나뉜다. (인터페이스) Hash : 값이 중복될 수 없는 유니크한 특징 Tree : 이진 트리 순회 방법 중 중위 순회 방식 Collection 기본 자료형이나 자료형의 그룹 형태로 저장 및 관리를 해주는 인터페이스 List (순서 o, 중복 o) - ArrayList, LinkedList, Vector, Stack Set (순서x, 중복 x) - HashSet, SortedSet, TreeSet ArrayList Collection에서 제일 많이 사용 하는 리스트 ..
JVM 메모리 구조 JVM : 자바 바이트 코드들을 OS에서 어떻게 실행할 지에 대한 표준 스펙 static 키워드를 이해하기 위해선 JVM의 메모리 구조 및 실행 단계에 대한 선행되어야 한다. JVM 구조 Garbage Collector : Heap 영역에 더이상 사용 하지 않는 객체 제거 Execution Engine : .class 파일을 하나의 명령 단위로 읽어 컴퓨터가 이해할 수 있는 기계어로 번역 후 실행 Class Loader : .java 파일을 .class로 (바이트코드)로 컴파일된 바이트 코드들을 운영체제를 통해 메모리를 할당 받아둔 Runtime Data Area로 적재하는 역할 Runtime Data Area : JVM 메모리 영역으로 OS로 부터 별도로 메모리 공간을 할당 받고 J..
객체지향 프로그래밍 - OOP 현실 세계를 객체로 모델링하여 소프트웨어를 개발하는 방법 소프트웨어를 개발할 때 시스템에 대한 요구사항이 계속해서 추가되고 변경된다. 이를 객체지향에 대입 장점 : 객체마다 유연하게 프로그래밍하여 시스템의 확장이나 변경에 쉽게 대응(안정적인 유지 보수 가능) 단점 : 처리 속도가 상대적으로 느리고 설계할 때 많은 시간과 노력 필요 객체지향 프로그래밍의 3요소 캡슐화(Encapsulation) - 정보은닉 public class Ex1 { private int id; private String name; private String password; public int getId() { return id; } public void setId(int id) { this.id = ..
람다식이란 (Lambda expression) 메서드를 하나의 식으로 표현한 것 메서드 이름과 반환값이 없어서 익명함수라고도 한다. Java8부터 사용가능 (매개변수..) -> { 실행문 }; 람다식 예시 public class Ex1 { public static void main(String[] args) { Sample01 f = (n) -> System.out.printf("%s", n); //():매개변수가 없을 때 f.test("테스트"); Sample01 f2 = new Sample01() { @Override public void test(String n) { System.out.printf("%s", n); } }; f2.test("테스트"); } } @FunctionalInterface ..