본문 바로가기

Java

Java - 웹 크롤러 만들기(1) @markdown # Java 웹 크롤러 만들기____- Java에서는 Jsoup HTML 파싱하는 라이브러리를 사용하여 크롤링 할 수 있다.- Python에서 `BeautifulSoup` 라이브러리와 비슷하다.- `selector`를 통해서 HTML 원하는 태그의 텍스트, 속성, 링크 등을 가져올 수 있다.- `Java 1.5`, `Scala`, `Android`, `OSGi`, `Lambda`, `Google App Engine`에서 동작하는 라이브러리이다.- 2017.05.31일 기준 1.10.2 버전이 최신버전임 ## Jsoup 라이브러리 추가하기_____- Eclipse에서 `.jar` 라이브러리를 추가하기 위해 `jsoup-1.10.2.jar` core library를 다운로드 한다.- 라이브.. 더보기
Java - AutoCloseable, Network 프로그래밍 @markdown ## Java AutoCloseable 사용_____- `AutoCloseable` 인터페이스를 상속받은 리소스를 `try( )`문에 넣고, 자동으로 close한다.- 객체 or 변수 선언문만 넣을 수 있다.- Java 7 버전 부터 가능한 자동 호출 기능- 해당 리소스 객체가 `java.lang.AutoCloseable` 인터페이스를 구현하고 있어야 사용가능 try ( Connection conn = new ConnectionFactory().getConnection();PreparedStatement pstm = conn.prepareStatement("");){...} catch(Exception e) {...} - `InputStream`은 2bytes를 유니코드 형태로 문장으로.. 더보기
Java - MVC, 정적 쿼리, 동적 쿼리 @markdown# MVC 패턴____- Model / View / Controller- 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. - 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 백그라운드에서 실행되는 비즈니스 로직을 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. - MVC에서 모델은 애플리케이션의 데이터, 뷰는 사용자 인터페이스 요소, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.- 참고 : [모델-뷰-컨트롤러](https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC)- 소스코드 : [DeptDAO.java](https:.. 더보기
Java - JDBC 사용 및 DB 연결 @markdown# Java JDBC 사용하기____ ## JDBC 연결 순서____ 1. driver load2. Connection DB연결3. Statement4. SQL 문장 실행5. 결과 받아와 처리6. DB 연결해제 ### 1. Eclipse project에 JDBC 라이브러리 추가하기____- JDBC Driver Load![](https://cloud.githubusercontent.com/assets/12658717/26191911/ba259d1e-3bea-11e7-9906-ad7b9318107d.png) - 추가할 프로젝트 오른쪽 마우스 클릭- `Build Path` -> `Configure Build Path` ![](https://cloud.githubusercontent.com/a.. 더보기
Java 문법 - Generic, Collection, IO @markdown# Java Generic____## 제네릭(Generic) 타입- 컴파일 단계에서 잘못된 타입 사용될 수 있는 오류 제거 가능- 컬렉션, 람다식(함수적 인터페이스), 스트림, NIO에서 널리 사용- 컴파일 시 강한 타입 체크 가능- 빈번한 타입 변환을 줄 일 수 있다.타입 변환 코드List list = new List();list.add("hello");String str = (String)list.get(0);타입 변환 제거 코드List list = new List();list.add("hello");String str = list.get(0); ## 멀티 타입 파라미터____- 두개 이상의 타입 파라미터 사용가능 `class { ... }` `interface { ... }`- 제네.. 더보기
Java 문법 - String, Arrays, Thread @markdown# String Class## String vs StringBuffer vs StringBuilder 문자 연결 비교____public class StringClassTest {public static void main(String[] args) {System.out.println("String 주소");String str = "a";System.out.println(System.identityHashCode(str));str += "b";System.out.println(System.identityHashCode(str)); System.out.println("StringBuffer 주소");StringBuffer sb = new StringBuffer();sb.append("a");S.. 더보기
Java 문법 - hashCode(), 객체 복제 @markdown ## hashCode() 함수 재정의 활용____@Overridepublic int hashCode(){ return name.hashCode; //같은 name으로 생성되는 hashCode가 같도록 하게끔 재정의} ## 객체 복제 - clone()____- 원본 객체의 필드 값과 동일한 값을 가지는 새로운 객체 생성하는 것- 복제 종류 1. 얕은 복제(thin clone): 필드 값만 복제 (참조 타입 필드는 번지 공유) 2. 깊은 복제(deep clone): 참조하고 있는 객체도 복제 ## Object의 clone() 메소드____ - 동일한 필드 값 을 가진 얕은 복제된 객체 리턴 - java.lang.Cloneable 인터페이스 구현한 객체만 복제 가능 - 깊은 복제 - clon.. 더보기
Java 문법 - Inner 클래스, 예외처리 170501 Java Inner Class, Exception 처리 다양한 위치에서 Class 사용해보기 public class OuterClass { int a = 10; static int b = 20; void print(){ System.out.println("instance 메소드 : " + (a+b)); } static void print2(){ System.out.println("class 메소드 : " + b); } class InnerClass1{ //instance 메소드와 변수만 사용할 수 있다. int c = 10; //static int d = 20; //class 변수 불가 void print3(){ System.out.println("instance 메소드 : " + (a+b).. 더보기
Java 문법 - 추상클래스, 인터페이스 @markdown# Java 추상 클래스, 인터페이스____## Abstract- 추상 클래스는 `new`로 생성할 수 없다.- `abstract` 메소드 하나를 가지고 있다면, 반드시 해당 클래스는 추상 클래스이어야 한다. ## 클래스 형변환____1. 자동(묵시적 변환)double = int부모 = 자식2. 강제(명시적 변환)int = (int)double자식 = (자식)부모## Interface____- 7버전에서는 상수+추상메소드만 가능- 8버전에서는 default, method, static method 추가 public interface TV {int channel6 = 6; //public static final 생략한 상수public static final int channel9 = 9; .. 더보기
Java 문법 - 접근제한자 활용 @markdown# Java 접근제한자____ - `static` : class 메소드이기 때문에 Object 생성과는 무관하다.class Calculator {static double pi = 3.141592;static {pi += 10;System.out.println(pi);} public Calculator() { System.out.println("Calculator 생성자");}} - `static` 영역이 메모리에 올라오며, `static` 영역에서는 `static`만 사용 가능하다. - `static` 블록이 먼저 수행되고, 생성자는 나중에 실행된다. - `static` 블록에서는 `static`이 아닌 변수는 사용할 수 없다. - `final` 필드 : 값 수정 불가(상수) - `fin.. 더보기