Notice
Recent Posts
Recent Comments
Link
passion and relax
[JAVA] 19. 거의 본문에 들어갈 뻔 했던 내용 본문
불변성 (Immutability)
String의 불변성
. String은 같은 변수를 여러번 연산하면, 연산시 사용한 문자열을 모두 String 풀에 넣는다.
. 어떤 문자열을 변수에 대입하면, String 풀에 그 문자열이 있는지 확인하고, 있으면 그 레퍼런스를 사용한다.
. 자바는 이런 재활용성 때문에 Sring에서 immutability를 기본적으로 사용하며, 가비지컬렉터도 돌지 않아 절대 사라지지 않는다.
. 이에 String 연산이 많다면 메모리 절약을 위해 StringBuffer나 StringBuilder를 사용하라.
Wrapper의 불변성
. 레퍼 클래스도 불변성을 갖는다.
Integer iWrap = new Integer(42); //42라는 정수값을 변경할 수 없다. setter 자체가 없다.
iWap = new Integer(37); //이것은 새로운 객체를 만든 것이지 37로 바꾼 것이 아니다.
String - StringBuffer - StringBuilder
모두 다 있는 메소드
char charAt (int index); //특정 위치의 문자
int length(); //문자열의 길이
String substring (int start, int end); //문자열 일부를 뽑아 냄
String toString(); //객체를 문자열로 나타낸 값
String 에만 있는 메소드
String concat (String); //문자열을 합하는 메소드
String replace (char old, char new); //치환
char[] toCharArray(); //char 배열로 변환
String toLowerCase(); toUpperCase(); //대소 변환
String trim(); //앞, 뒤 끝의 공백 제거
String valueOf (char[]); //char에서 String으로
String valueOf (int i); //원시값에서 문자열로.. 다른 원시형도 가능.
StringBuffer와 StringBuilder에 있는 메소드
String append(String); //문자열 합하는 메소드
StringBxxx delete (int start, int end); //일부 삭제
StringBxxx insert (int offset, any primitive or char[]); //offset 위치에 뭔가를 삽입함.
StringBxxx replace (int start, int end, String s); //일부를 String을 변환
StringBxxx reverse(); //뒤집음.
void setCharAt (int index, char ch); //해당 위치를 문자로 치환
assert 문
assert (height > 0); //참이면 아무일 없이 계속 진행. 거짓이면 AssertionError 발생
assert (height > 0) : "height = " + height; //거짓이면 AssertionError에 높이값을 추가해서 출력. 어떤 자바 표현식도 가능함.
컴파일 방법 : 그냥 하면 됨.
javac Ha.java
실행 방법 : -ea 옵션 추가. assert가 작동하게 됨.
java -ea Ha
정적 중첩 클래스
public class FooOuter {
static class BarInner {
void sayIt() {
sout("inner");
}
}
}
class Test {
psvm {
FooOuter.BarInner foo = new Footer.BarInner(); //내부가 정적이기에 외부클래스의 인스턴스 불필요함.
foo.sayIt();
}
}
익명 내부 클래스
public class TestAnon {
psvm {
JFrame frame = new Frame();
JButton button = new JButton("click");
frame.getContentPan().add(button);
//button.addActionListener(quitListener); //원래 이런 식으로 한다.
button.addActionListener ( new ActionListener() {
public void actionPerformed (ActionEvent ev) {
System.exit(0);
}
} );
}
}
다차원 배열
int[][] a2d = new int[4][2];
. [4]에 의해 래퍼런스 변수를 담을 수 있는 int형 배열을 잡고, 이 배열 주소를 a2d 변수에 담는다.
a2d ㅁ => ㅁ ㅁ ㅁ ㅁ
. [4][2]에 의해 2개 짜리 배열 4개를 준비한다.
[4][2] => ㅁㅁ, ㅁㅁ, ㅁㅁ, ㅁㅁ
. 4개의 각각의 레퍼런스는 처음 a2d에 의해 잡혀진 4개의 ㅁㅁㅁㅁ에 각각 담는다.
ㅁ => ㅁㅁ, ㅁ => ㅁㅁ, ㅁ => ㅁㅁ, ㅁ => ㅁㅁ
int myVal = a2d[2][1];
배열 인덱스는 0부터..
하나의 값만 가져온다.
int[] myRow = a2d[2]
한 row를 가져온다.
즉 일차원 레퍼런스를 가져온다.
int[][] x = {{2,3,4}, {7,8,9}}
2*3 배열의 선언과 동시에 초기화하는 방법.
int[][] y = new int [2][]; y[0] = new int[3]; y[1] = new int[4];
불규칙적인 크기를 갖는 이차원 배열도 생성 가능하다.
열거형 (Enumerations) :: 열거형의 기본
public enum Member { JERRY, BOBBY, PHIL };
public Members theMember;
if (theMember == Members.JERRY) {
//관련 작업
}
열거형 (Enumerations) :: 열거형의 고급
public class MyEnum {
enum Names {
JERRY ("lead quiter") {
public String sings() {
return "plaintively";
}
},
BOBBY ("rhythm guiter") {
public String sings() {
return "hoarsely";
}
},
PHIL ("bass");
private String instrument;
Names(String instrument) {
this.instrument = instrument;
}
public String getInstrument() {
return this.instrument;
}
public Striing sings() {
return "occasionally";
}
}
psvm {
for (Names n : Names.values()) {
sout(n + " : " + n.getInstrument() + " : " + n.sings());
}
}
}
출력
JERRY : lead guitar : plaintively
BOBBY : rhythm guiter : hoarsely
PHIL : bass : occasionally
'프로그래밍' 카테고리의 다른 글
[JAVA] 21. 웹, 운영체제, 클래스 정보 (0) | 2024.06.07 |
---|---|
[JAVA] 20. Library - JRI (2) | 2024.06.07 |
[JAVA] 18. 분산 컴퓨팅 (RMI와 서블릿, EJB와 지니) (1) | 2024.06.04 |
[JAVA] 17. 코드를 배포합시다 (패키지 제작과 배포) (1) | 2024.06.04 |
[JAVA] 16. 자료구조 (컬렉션 및 제네릭) (1) | 2024.06.04 |