Java 23. 자바 기본 클래스
자바 기본 클래스
객체 지향 프로그래밍
1)추상화(Abstraction)와 일반화
- 어떤 영역에서 필요로 하는 속성이나 기능을 추출하는 작업
- 데이터 구조, 표현방법에 대한 추상화
- 추상화의 의도는 단순화이며, 일반화의 의도는 공통점을 뽑는 것
2)캡슐화(Encapsulation)
- 데이터를 감싸서 외부에서 사용 가능한 부분만 제공 (information hiding)
- 사용하는 코드(클라이언트 코드)가 세부적인 사항을 알 필요가 없음.
- private : 나만 볼수 있는 것, 같은 클래스 내부에서만 접근이 가능함.
3)상속성(Inheritance)
- 일반적인(general) 개념의 객체에서 보다 구체적인(specific) 개념의 객체의 관계를 표현
- 상위 클래스 속성과 기능을 하위 클래스에서 사용하거나 재정의 할수 있음.
4)다형성(Polymorphism)
- 같은 메시지, 같은 구현에 대해 각 객체가 다른 표현과 결과를 나타내는 것.
- 조상 타입으로 자손 타입의 객체들을 접근할 수 있는 것.
java.lang 클래스
- 프로그래밍시 import하지 않아도 자동으로 import 됨
- 많이 사용하는 기본 클래스들이 속한 패키지
Object
- 모든 클래스는 상속받음
toString() 메서드
- 생성된 객체의 클래스명과 해시 코드 보여줌
- 보통은 객체 정보를 String으로 바꿔서 사용할때 많이 사용됨.(재정의)
- equals() 메서드
String, StringBuffer, StringBuilder
Number, Integer, Long, Float, Double
래퍼 클래스 (Wrapper class)
- 기본 데이터형 (정수형, 문자형,논리형)에 대응하는 클래스
- 기본 자료형에 대해서 객체로서 인식되도록 ‘포장’ 했다.
- 다양한 메서드 추가
- 값 변환, 형변환, 진법 변환
- 상수 (MAX_VALUE, MIN_VALUE)
- 컬렉션 프레임워크에서 사용
문자열 변환
- 각각 문자열을 수치형으로 변환하는 메서드
- parseByte() : 문자열을 byte형으로 반환
- parseInt()
- parseDouble()
- 박싱과 언박싱
- 기본 타입 : byte, short, int ~
- 래퍼클래스: Byte, Short, Integer ~
System
Math
- 모두 static으로 선언
Thread
가변 인수 (variable length argument)
- 인수 개수가 가변적인 것
- 말줄임표 ...
public class VarArgsTest {
public static void helloEzen(String...args) { // 가변인수 표시
for(String str : args) {
System.out.print(str +"\t");
}
System.out.println();
}
public static void main(String[] args) {
helloEzen("이순신");
helloEzen("이도","이방원"); //중복가능
helloEzen("이도","이방원","이순신");
}
}
어노테이션
- 자바 소스 코드에 추가하여 사용할수 있는 메타 데이터의 일종임
@ 기호를 앞에 붙여서 사용
- @Override
- @Deprecated
- 이 어노테이션이 적용된 메서드는 문제의 발생 소지가 있거나
개선된 기능의 다른 것으로 대체되어서 더이상 사용 권장하지 않음.
- 호환성 유지를 위해서 존재하지만 이후에 사라질수 있는 클래스 또는 메서드
- @SuppressWarnings
- Deprecated 관련 경고 등 특정 메세지를 지정하면 해당 경고 메세지를 출력하지 말라는 의미.
interface Unit{
@Deprecated
@SuppressWarnings("deprecated")
void move(String str); // 판단하라
void run(String str);
}
class Horse implements Unit{ // interface 구현
@Override
public void move(String str) { // 사용하는데 큰 문제없음
System.out.println(str);
}
@Override
public void run(String str) {
System.out.println(str);
}
}
public class DeprecatedTest {
@SuppressWarnings("deprecated") // 그것과 관련된 경고를 표시하지 x
public static void main(String[] args) {
Unit unit =new Horse();
unit.move("이동합니다."); // 취소선으로 표시됨
unit.run("달립니다.");
}
}
String 클래스
1. 선언하는 두가지 방법
public class StringTest {
public static void main(String[] args) {
// new 연산자와 문자열 리터럴 매개변수가 있는 생성자를 이용
String str1 = new String("오늘은 금요일입니다."); //첫번째 방법
// 문자열 리터럴을 직접 대입함
// 상수로 리터럴
String str3 ="오늘은 금요일입니다."; //두번째 방법
}
}
- 문자열 리터럴을 직접 대입하여 만들어진 객체 ( 두번째 방법 )
- String Constant Pool이라는 곳에 분리해서 따로관리한다.
- 같은 객체를 참조한다.
- new 연산자 ( 첫번째 방법 )
2. 문자열형 변수의 참조 비교
- == (비교연산자)
- 객체가 가진 문자열의 내용을 비교하는것이 아니라 같은 객체인지 아닌지를 비교
3. 문자열형 변수의 내용 비교
- equals()
- compareTo()
public class StringContentTest {
public static void main(String[] args) {
String str1 = new String("Apple"); // 대문자
String str2 = new String("apple"); // 소문자
//인스턴스 내용 비교
if(str1.equals(str2))
System.out.println("두 문자열은 같습니다.");
else
System.out.println("두 문자열은 다릅니다."); // O
// 대소문자 안따진다.
if(str1.compareToIgnoreCase(str2)==0)
System.out.println("두 문자열은 같습니다."); // O
else
System.out.println("두 문자열은 다릅니다.");
// 대소문자 구분 비교 (사전순으로 비교)
int cmpResult = str1.compareTo(str2);
if(cmpResult==0)
System.out.println("두 문자열은 일치합니다.");
else if(cmpResult<0)
System.out.println("사전의 앞에 위치하는 문자: "+str1); // O
else {
System.out.println("사전의 앞에 위치하는 문자: "+str2);
}
}
}
4. 메서드
- 문자열 연결
- concat()
- 문자열에서 문자찾기
- indexof()
- 문자열 자르기
- substring()
- 지정한 문자 반환
- char charAt(int index)
- 문자열 포함여부 조사
- boolean contains(String s)
- 시작하는 문자열 s인지 조사
- boolean startsWith(String s)
- 문자열 앞뒤에 있는 공백 제거
- String trim()
public class ConcatIndexOf {
public static void main(String[] args) {
//concat
String str1 = "기초";
String str2 = "프로그래밍"; // String끼리 합치기
String str3=str1.concat(str2); // 합한것을 str3에 할당
System.out.println(str3); // 기초프로그래밍
String str4 = "자바".concat(str3);// 문자열 리터럴과 String합치기
System.out.println(str4); // 자바기초 프로그래밍
//IndexOf
String str5 = "AppleBananaOrange";
int num1 = str5.indexOf("a"); // "a"위치 반환
int num2 = str5.indexOf("a", num1+1); // 찾을 문자열, 시작할 위치
System.out.println(num2);
}
}
public class SubString {
public static void main(String[] args) {
String str1 = "AppleBananaOrange";
int num1 = str1.indexOf("Banana"); //5
int num2 = str1.indexOf("Orange"); //11
String str2= str1.substring(num1,num2); // 5 ~ 10
System.out.println(str2); //Banana
String str3 = str1.substring(num2);
System.out.println(str3); // 11 ~
}
}
StringBuilder, StringBuffer
- 기능 동일
- 한번 생성된 String은 불변 (immutable)하지만
- 내부적으로 가변적인 char[]를 멤버변수로 가짐.
- 문자열을 여러번 연결하거나, 변경할때 사용하면 유용함.
- StringBuffer는 멀티 쓰레드 프로그래밍에서 동기화 (Synchronization) 를 보장
StringBuilder는 단일 쓰레드 프로그램에서 사용 권장.
public class StringBuilderTest {
public static void main(String[] args) {
// 임시공간
StringBuilder buffer = new StringBuilder("학교종이 땡땡땡") ;
buffer.append(" 어서모이자."); // 뒤에 붙이기
System.out.println(buffer.toString());// 학교종이 땡떙땡 어서모이자
buffer.append(12345);
System.out.println(buffer.toString());// 학교종이 떙떙떙 어서모이자 12345
buffer.delete(0, 4); //삭제 0부터 4까지
System.out.println(buffer.toString());//땡땡땡 어서모이자 12345
buffer.replace(4, 8, "ABC"); // 4~7 까지 바꾸기
buffer.reverse(); // 순서거꾸로
}
}
댓글남기기