자바에서 은근 계속 헷갈리는 것이 클래스, 메소드(기능)이다.
자동차를 예로 들었을 때,
클래스 : Car
클래스 안에는 color라는 속성값, 달리기( ), 멈추기 ( ) 이런 기능(메소드)
이라 정의할 수 있다.
기능 사용법은?
Car car객체 = new Car( );
car객체.달리기( );
car객체.멈추기( );
전자는 속성값이고 후자는 기능을 담당하는 메소드이다.
length는 대부분 리스트의 속성값이다.
예를들어 리스트 a가 있다고 할 때, a.length로 사용 가능하다.
따라서, 문자열에서는 equals라는 메소드를 이용해 비교해야 한다.
문자열 s,s1이 있다고 할때, s.equals(s1);
큰 따옴표 -> String
작은 따옴표 -> char
두 인자를 받고 문자를 자른다. 단, a부터 b - 1까지 자르게 되므로 항상 인덱스를 생각해야 한다.
인덱스는 0부터 찾게 된다.
스레드 : 동시 작업
일단, StringBuffer, StringBuilder는 수정이 가능한 문자열이다. 문자열을 내부적으로 처리할때 버퍼의 크기를 확장 후 문자열을 처리한다.
저 세 단어가 같이 나온 이유는 스레드를 처리하는 데 있어서 StringBuffer, StringBuilder가 아주 큰 차이점을 보이기 때문이다.
결론부터 말하면 StringBuffer가 Thread-safe(동기화 지원)을 하기 때문에 멀티 스레드 환경에서 더욱 안전 하다는 것이다. 하지만 동기화 지원을 하기 때문에 빌더와 비교했을 때는 속도가 조금 떨어지게 되는 단점도 존재한다.
정리하자면, 단일 스레드에서는 빌더를 멀티 스레드에서는 버퍼를 사용하는 것이 일반적이다. 코드에서도 차이를 보이는데 버퍼를 정의할때는, synchronized 라는 단어가 같이 정의 된다.
public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable {
public **synchronized** StringBuffer append(String str) {
super.append(str); // 상속받은 부모 메서드 그대로 사용
return this;
}
참고로, StringBuffer, StringBuilder는 AbstractStringBuilder를 부모 클래스로 상속받고 있고 부모가 가지고 있는 기능들을 그대로 데려와서 사용한다.
String address = "주소값";
URL url = new URL(address);
InputStream in = url.openStream();
InputStreamReader isr = new InputStreamReader(in, "euc-kr");
BufferedReader reader = new BufferedReader(isr);
while(true) {
String data = reader.readLine(); // 한줄씩 데이터 가져오기
if(data == null) break; // 읽어올 데이터가 없으면 종료
text += data + "\n";
}
System.out.println(text);
2일차인게 믿기지 않는 진도 속도들... 위에 정리한게 다는 아니지만 내가 이미 알고 있는 부분은 따로 정리하진 않았다. 오늘 배운 것 중에 정규표현식이 가장 인상 깊었지만 그것은 나중에 따로 정리하는 걸로.