Java 89

[Java] 부모 생성자 호출 2022.12.11

현실에서 부모 없는 자식이 있을 수 없듯이 자바에서도 자식 객체를 생성하면 부모 객체가 먼저 생성됨 자식클래스 child = new 자식클래스(); 이와 같은 코드는 자식클래스의 객체만 생성하는 것처럼 보임 사실은 내부적으로 부모 클래스의 객체가 먼저 생성되고 자식 클래스의 객체가 생성됨 모든 객체는 클래스의 생성자를 호출해야만 생성됨 ➡ 부모 객체도 예외는 아님 Q) 부모의 객체를 생성하기 위해 부모 생성자를 어디서 호출한 것일까? A) 자식 생성자에 숨어 있음 public 자식클래스() { super(); } 부모 생성자는 자식 생성자의 맨 첫 줄에서 호출 됨 자식 클래스의 생성자가 명시적으로 선언되지 않았다면 컴파일러는 기본 생성자를 생성해 냄 super()는 부모의 기본 생성자를 호출함 publi..

[Java] 상속 2022.12.11

상속의 개념현실에서 상속(Inheritance) : 부모가 자식에게 물려주는 행위자식은 상속을 통해서 부모가 물려준 것을 자연스럽게 (no cost) 이용할 수 있음객체 지향 프로그램에서도 부모 클래스의 멤버를 자식 클레스에게 물려줄 수 있음프로그램에서는 부모 클래스를 상위 클래스, 자식 클래스를 하위클래스 / 파생 클래스 라고 부름 상속은 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 코드의 중복을 줄임  field1, fiedl2, method1(), method2() 를 가지는 클래스를 작성한다고 할 때      ① 4개를 모두 처음부터 작성하는 것      ② field1과 method1()을 가지고 있는 클래스가 있다면 이를 상속하고 field2와 method2()만 추가 작..

[Exception] java.util.ConcurrentModificationException 2022.12.11

✔ ConccurentModificationException 동시적인 수정이 불가능한 객체에 대하여 그러한 수정이 발생하였을 때 발생하는 예외 EX) 한 스레드가 다른 스레드가 Collection을 iteration 하는 동안 한 스레드가 Collection을 수정하는 것을 허용하지 않음 이러한 행동이 감지되었을 때 ConcurrentModificationException을 발생시킴 다른 스레드와 동시에 수정될때만 발생하는 예외는 아님 단일 스레드 상황에서도 예외가 발생할 수 있음 EX) Collection을 순회하며 direct하게 수정할 때 ConcurrentModificationException 발생 Collection 객체에는 엘리먼트가 추가되거나 제거될 때 마다 modCount 변수를 수정 컬렉..

[Java] Jsoup을 이용하여 웹 크롤링하기 2022.12.11

IDE : Eclipse EE JDK : 14.0.1 OS : Windows 10 1) Java Project에 Jsoup 라이브러리 추가 Jsoup은 기본으로 제공하는 라이브러리가 아님 Jsoup을 사용하기위해서는 프로젝트에 추가해줘야 함 Jsoup 라이브러리 다운 받기 Download and install jsoup Download and install jsoup jsoup is available as a downloadable .jar java library. The current release version is 1.15.3. What's new See the 1.15.3 release announcement for the latest changes, or the changelog for the ..

[Java] Jsoup 라이브러리 2022.12.10

Jsoup 이란? real-world HTML을 다루기위한 Java 라이브러리 URL을 fetch하고 HTML5 DOM의 method 와 CSS selector를 사용하여 데이터를 추출 및 처리하는 편리한 API를 제공 URL, 파일, 문자열을 통해 HTML을 파싱할 수 있음 String html = "" + "Parsed HTML into a doc."; Document doc = Jsoup.parse(html); parse(String html, String baseUri) 인자로 들어온 html을 파싱하는 메소드 - html : 파싱하기위한 HTML - baseUri : 상대경로를 절대경로로 확인하기위해 사용되는 argument parse(String html) DOM traversal 또는 CSS..

[JAVA] 어노테이션 (Annotation) 2022.12.06

Annotation 이란? 어노테이션 (Annotation)은 메타데이터(metadata) 라고 볼 수 있음 메타데이터 (metadata) 애플리케이션이 처리해야 할 데이터가 아니라, 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보 어노테이션은 다음과 같은 형태로 작성됨 ( @+어노테이션 명) @AnnotationName 어노테이션의 용도 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공 실행 시(런타임 시) 특정 기능을 실행하도록 정보를 제공 + ) 빌드시 자동으로 XML 설정 파일을 생성하는데 사용 + ) 배포를 위한 JAR 압축 파일을 생성하는데 사용 + ) 실행 시 클래스의 ..

[Java] Getter와 Setter 메소드 2022.12.04

클래스를 선언할 때 가능하다면 필드를 private로 선언해서 외부로부터 보호필드에 대한 Setter와 Getter 메소드를 작성해서 필드값을 안전하게 변경/사용하는 것이 좋음 * 외부에서 필드값을 읽을 수만 있고 변경하지 못하도록 하려면 (읽기전용)Getter 메소드만 선언Setter 메소드를 private 접근 제한을 갖도록 선언 Getter객체 외부에서 객체의 필드값을 사용하기에 부적절한 경우도 있음외부에서 객체의 데이터를 읽을 때도 메소드를 사용하는 것이 좋음메소드로 필드값을 (가공한 후) 외부로 전달 private 타입 fieldName; //필드 접근 제한자 : private//Getterpublic 리턴타입 getFieldName() { return fieldName;}접근 제한자 : ..

[Java] 접근 제한자 2022.12.04

main() 메소드를 가지지 않는 대부분의 클래스 ➡ 외부 클래스에서 이용할 목적으로 설계된 라이브러리 클래스라이브러리 클래스를 설계할 때는 접근범위를 구별하여 필드, 생성자, 메소드를 설계해야 함1) 외부 클래스에서 접근할 수 있는 멤버2) 외부 클래스에서 접근할 수 없는 멤버EX) 객체 생성을 막기위해 생성자를 호출하지 못하게 함      객체의 특정 데이터를 보호하기 위해 해당 필드에 접근하지 못하도록 막음자바는 이러한 기능을 구현하기 위해 접근 제한자 (Acess Modifier)를 제공하고 있음 접근 제한적용 대상접근할 수 없는 클래스public클래스, 필드, 생성자, 메소드없음protected필드, 생성자, 메소드자식 클래스가 아닌 다른 패키지에 소속된 클래스default클래스, 필드, 생성자..

[Java] 복합대입연산자 캐스팅 (형 변환) 2022.11.30

int num=5; num=num+1.0; //컴파일 에러 이와 같이 코드를 작성할경우, 2라인에서 컴파일에러가 발생함 [Java] 타입 변환 타입 변환 : 데이터 타입을 다른 데이터 타입으로 변환하는 것 - 타입 변환에는 두 가지 종류가 있음 자동(묵시적) 타입 변환 강제(명시적) 타입 변환 1. 자동 타입 변환 자동 타입 변환 (Promotion) : bean-soup-99.tistory.com 자동형변환으로 인하여 num이 double 타입이 되고, 연산결과도 double int 형인 num에 대입할 수 없음 int num=10; num+=1.0; 하지만 복합대입연산자를 사용하여 작성하면 컴파일에러가 나지 않는다. WHY 오라클 공식문서를 보면 복합대입연산자가 어떻게 구현되어있는지를 알 수 있음 C..

[Java] import 문 2022.11.29

같은 패키지에 속하는 클래스들은 아무런 조건 없이 다른 클래스를 사용할 수 있음다른 패키지에 속하는 클래스를 사용하려면 두 가지 방법 중 하나를 선택해야 함패키지와 클래스를 모두 기술import 문 사용 1) 패키지와 클래스를 모두 기술package com.mycompany;public class Car { com.hankook.Tire tire = new com.hankook.Tire();}com.hankook 패키지에 소속된 Tire 클래스를 이용해서 필드를 선언하고 객체를 생성➡ 패키지 이름이 짧을 경우 불편함이 없지만      1) 패키지 이름이 길거나           2) 사용해야 할 클래스 수가 많다면      패키지 이름을 붙인다는 것은 전체 코드를 난잡해 보이게 할 수 있음  💡 ..