목록Java (13)
궁금한게 많은 코린이의 Developer 노트
내가 작성했던 코드/*shuffle 메서드 작성*/private static int[] shuffle(int[] arr){for(int i = 0; i 아래 shuffle 배열 결과 값을 보면 값에 random 값이 적용이 되어 중복 값이 들어간 것을 알 수 있다. 뭐가 문제였을까?결론을 말해보자면, 바로 arr[i] = randomNum 에서 arr[i] = arr[randomNum] 으로 변경해주어야 한다. 내가 수정한 코드 /*shuffle 메서드 작성*/ private static int[] shuffle(int[] arr){ for(int i = 0; i 핵심은 인덱스와 인덱스 간의 치환이다. arr[i] = arr[랜덤 값]변경 전) arr[i] = randomNum : 인덱스 값 ..
오버로딩과 오버라이딩을 공부하고 나서 시간이 지나면 많이 헷갈리는 개념인 것 같아서다시 정리해보려고 한다.이름이 비슷해서 앞으로 직역해서 기억해야 겠다.오버로딩 Overloading Over: 넘어서, Loading: 적재하다. 직역하면 "과적재" 입니다.프로그래밍에서는 같은 이름의 메서드를 여러 개 정의하여 매개변수의 타입이나 개수에 따라 다르게 동작하도록 하는 것을 나타냅니다. 즉, 메서드의 이름이 같지만, 그 기능이 매개변수에 따라 다르게 "적재"된다고 볼 수 있습니다. 오버라이딩 OverridingOver: 넘어서 Riding: 쓰다 직역하면 "덮어쓰기", "재정의" 입니다.프로그래밍에서 오버라이딩은 상속받은 클래스에서 부모 클래스의 메서드를 재정의하는 것을 의미합니다. 즉, 자식 클래스에서 부..
프로세스(Process)와 스레드(Thread)프로세스를 구성하는 요소 중 하나가 스레드 이기 때문에 스레드를 이해하기 위해서 프로세스를 먼저 알아보자. 프로세스(Process)란? 프로세스란 단순하게 말하면 실행 중인 프로그램 이라고 할 수 있다. 하나의 자바 애플리케이션을 실행중이라면 그것이 바로 프로세스이다. 다시 말해, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다.프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 + 스레드로 구성된다.ex) 크롬 브라우저 창 2개 -> 프로세스 2개 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램메모리에 올라와 실행되고 있는 독립적인 인스턴스(개체)운영체제로부터 시스템 자원을 할당받는 작업 단위기본적으로 프..
최근 프로젝트에서 크롤링 관련 기술을 사용해보려고JSOUP과 셀레니움 두가지를 사용하여 모두 진행해 보았다.테스트 코드를 실행해보면서 셀레니움이 동적 크롤링이라는 이점이 있지만성능면에서 조금 떨어지는 부분이 있어 JSOUP으로 다시 바꾸어 진행했다. 구체적으로 두 가지 기술에는 어떤 차이점이 있는 걸까?상황에 맞게 사용하려면 어떤 크롤링 기술을 사용해야 하는 걸까? 먼저 JSOUP에 대해 알아보자. 정적 웹페이지 도구 JSOUP 라이브러리soup은 HTML 문서에 저장된 데이터를 구문 분석, 추출 및 조작하도록 설계된 오픈 소스 Java 라이브러리이다.위키백과Jsoup은 자바로 작성된 HTML 파싱및 조작 라이브러리이다. 이번에 활용한 기능은 아래와 같다.HTML 파싱: HTML 문서를 파싱하여 DO..
Tistory 블로그 크롤링을 진행했으며, Tistory 블로그의 경우 한 페이지 당 10개씩만 가져올 수 있다는 점과 속도 측면을 고려하여셀레니움 방식 보다는 JSOUP 크롤링 방식을 채택하여 진행하였습니다. 셀레니움 사용이전 코드 옵션을 두개만 추가해서 크롤링을 진행했고 테스트 했을 때 22초가 걸렸다. 여러 블로그 글에서 옵션을 더 추가하면 속도 측면에서 개선이 된다는 글을 참고하여 추가해 보았습니다.이후 코드옵션을 4개로 추가해서 크롤링을 진행했고 테스트 했을 때 19초가 걸렸다. 결과는 미미했다..이런 옵션을 추가해준다고 해서 속도가 드라마틱하게 개선되지는 않는다. JSOUP으로 크롤링을 진행하고 나서 너무 정적 데이터만 가져오는 것이 아닌가 해서동적 데이터를 가져오기 위해 셀레니움으로 코드..
자바는 플랫폼 독립적인 언어로, 다양한 OS(운영 체제에서) 실행이 가능하다.그 이유는 자바는 컴파일 과정을 통해서 바이트 코드로 변환되고, 해당 바이트 코드는 JVM에서 실행되기 때문이다. 컴파일 과정은 크게 두 단계로 나눌 수 있다. 1. 자바 소스 파일(.java)을 바이트 코드(.class)로 변환하는 과정. 자바 컴파일러가 소스 코드를 바이트 코드로 변환하여 JVM에서 실행할 수 있게 한다. 2. 바이트 코드를 JVM에서 실행하는 과정. JVM은 바이트 코드를 해석하고 실행하는 역할을 한다.소스 코드를 바이트로 변환하는 과정에서 다양한 최적화 작업을 수행한다. 최적화는 실행속도와 메모리 사용량을 줄일 수 있다. 자바 컴파일 프로세스1. 개발자가 자바 소스코드를 작성.2. 자바 컴파일러가 자..
이미 22버전이 설치된 상황에서11버전으로 환경변수 설정을 변경해보았다. - jdk 11버전으로 환경변수 재설정한 모습 22버전이 깔려있는 상태에서는 11버전으로의 환경변수 변경이 되지 않는다.컴퓨터를 다시 시작해봐도 변경되지 않았다.(버전이 두개가 깔려있어도 환경변수 설정하면 되겠지 라는 생각을 했었던 것 같다.) 제어판 > 프로그램 제거 > jdk에서 22버전을 삭제했더니 정상적으로 변경 처리 되었다.
1. jdk 11버전 설치2. C드라이브 > program files > java > jdk-11 > 위의 창에서 경로 복사 (여기서의 program files는 x86 이 아니다.) 3. 모니터 하단 바에서 돋보기 모양 클릭 > '시스템 환경'검색 > '시스템 환경 변수 편집' 을 클릭 4. 시스템 변수 > 새로만들기 > JAVA_HOME / 아까 복사해뒀던 경로 C:\Program Files\Java\jdk-11 복붙하기 > 확인 5. 시스템 변수 > Path 더블 클릭 > 새로만들기 > %JAVA_HOME%bin 복붙 > 맨 위로 이동 > 확인 제대로 설치 되었는 지 확인하기 cmd 창에서 > java -version 검색 > jdk -11(원하는 버전) 이 나왔다면 성공한 것임.
Scanner scanner = new Scanner(System.in); String inputData; System.out.print("첫번째 수:"); //숫자입력 //이미 작성한 값(실수로 띄어쓰기 사용한 경우)에서 공백을 없애서 값을 집어넣는다. String strNum1 = scanner.nextLine().replaceAll(" ", ""); System.out.printf("두번째 수:"); //숫자입력 String strNum2 = scanner.nextLine().trim(); int num1 = Integer.parseInt(strNum1); int num2 = Integer.pa..
나의 문제풀이class Solution { public double solution(int[] numbers) { double sum = 0; for (int i = 0; i sum의 역할은 그냥 반복문의 요소의 값을 더해주는 역할일 뿐인데,자료형이 double일 필요가 있을까?그렇다..담는 요소 또한 자료형을 맞추어 주어야 원하는 double 형 값이 나온다.sum 변수를 int 자료형으로 선언해서 담아보았더니 값 또한 int로 나오게 되었다.출력하는 변수의 자료형에 맞추어서 값이 출력되는 건가?나는 int 자료형에 담겨있다고 하더라도 더하는 요소들이 double 값이기 때문에 상관 없는 것인 줄 알았다.이 부분에 대해서는 구글링을 해봐야겠다.class Solution ..