목록프로그래밍👩🏻💻 (110)
suyeonme
소수(Prime Number): 1보다 크고 자기 자신과 1 이외에 어떤 정수로도 나누어떨어지지 않는 정수 합성수(Composite Number): 나누어떨어지는 정수가 하나 이상 존재하는 수 해결 1) i가 2 또는 3으로 나누어떨어지지 않으면 4, 6으로도 나누어떨어지지 않는다. 즉 2부터 n-1까지의 어떤 소수로도 나누어지지 않는다는 조건을 만족하는지 조사하여, 불필요한 나눗셈을 줄일 수 있다. (7이 소수인지 여부는 7보다 작은 소수 2,5,3으로 나눗셈을 하여 구한다.) public ArrayList getPrimeNumbers(int num) { ArrayList primeNumbers = new ArrayList(); for(int i = 2; i
해결 1) public int[] reverseArr(int[] arr) { for(int i = 0; i < arr.length /2; i++) { int temp = arr[i]; arr[i] = arr[arr.length - i -1]; arr[arr.length - i -1] = temp; } return arr; } 해결 2) public void reverseArr2(int[] arr) { for(int i = 0; i < arr.length / 2; i++) { swap(arr, i, arr.length - i -1); } } public void swap(int[] arr, int idx1, int idx2) { int temp = arr[idx1]; arr[idx1] = arr[idx2]..
Array 특징 배열은 선언하는 동시에 배열의 크기를 지정한다. 그 이후에는 크기를 변경할 수 없다. (크기가 고정적이다) 선언시 별도의 초기화를 하지 않으면 기본값으로 0이 채워진다. 배열의 물리 주소와 논리 주소는 동일하다. 따라서 index를 통해서 요소에 접근할 수 있다. 메모리 공간이 연속적으로 구성된다. 배열은 참조 객체(reference object)이므로 배열을 가리키는 참조 변수는 스택(stack) 영역에 할당된다. 이 참조 변수가 가리키는 주소값은 실제 힙(heap) 영역에 생성되는 배열의 주소값이다. index를 사용하여 요소에 접근한다. 단점 배열의 크기가 고정적이기 때문에 확장성이 떨어진다. 따라서 데이터의 개수가 가변적이라면 배열의 사용을 지양해야한다. 배열 중간의 요소를 제거하..
for loop은 단순하다. 하지만 for loop도 어떻게 작성하느냐에 따라서 퍼포먼스가 달라진다. 예를 들어, n만큼 +와 -를 번갈아 출력하는 코드를 짠다고 해보자. 가장 쉽게 떠올릴 수 있는 방법이다. 하지만 아래와 같이 코드를 작성해야할 경우 2가지 문제가 있다. 1. 반복할 때 마다 if문을 실행해야한다. 2. 변경할 때 유연하게 대응하기 어렵다. (i값을 바꾸고 싶은 경우 i와 n의 값을 마찬가지로 수정해야한다) for(int i = 0; i < n; i++) { if(i % 2 == 0) { System.out.print("+") } else { System.out.print("-") } } 위의 코드를 아래와 같이 최적화할 수 있다. 아래 코드는 반복마다 if문을 실행하지 않는다. 또한 ..
Parameter, Argument 함수에 전달되는 변수는 parameter이다. 함수를 호출할 때 넘기는 value는 argument이다. public int sum(int num) {} sum(3); Operators 단항 연산자(unary operator): a++ 2항 연산자(binary operator): a < b 3항 연산자(ternary operator): a ? b : c 사전 판단 반복, 사후 판단 반복 사전 판단 반복: 실행 전에 반복을 계속할지 판단한다. 따라서 loop 본문을 한번도 실행하지 않을 수도 있다. (while loop, for loop) 사후 판단 반복: 실행 후에 반복을 계속 할지 판단한다. 따라서 루프 본문을 한번은 반드시 실행한다. (do-while loop) 단..
scanner는 키보드와 연결된 표준 입력 스트림(system.in)에서 문자나 숫자를 꺼내는 장치 역할을 한다. 이 때 system.in은 키보드와 연결된 표준 입력 스트림(standard input stream)이다. import java.util.Scanner public class A { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); scanner.nextInt(); } } 자료형에 따른 Method method data type Description nextBoolean() boolean nextByte() byte nextShort() short nextInt() int nextLong() l..
Scope란 bean이 존재할 수 있는 범위를 의미한다. 아래와 같이 @Scope 애노테이션을 사용하여 bean의 스코프를 지정할 수 있다. @Scope("prototype") @Component public class BeanTest() Scope의 종류 스프링에서 지원하는 스코프의 종류는 아래와 같다. 1. Singleton (default) 2. Prototype 3. Web 관련 1. Singleton Scope 기본(default) 스코프로, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 스프링 빈(bean)을 등록하면 기본적으로 싱글톤 스코프이다. 빈(bean)을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환한다. 스프링 컨테이너 생성 시점에 초기..
Controller와 관련있는 자주 사용할 것 같은 애노테이션을 정리했다. @RequestMapping Controller에서 들어온 http request를 method와 매핑(mapping)하게 위해 사용한다. @RequestMapping(value = "URI", method = RequestMethod.GET) @RequestMapping({ "/members", "member_list" })와 같이 복수개의 URL을 등록할 수 있다. method를 지정하지 않으면 모든 요청에 대해서 호출된다. @RestController public class MemberController { @RequestMapping(value = "/member", method = RequestMethod.GET) pub..