<Object 클래스>
- java.lang 패키지에 속한 클래스
- 모든 클래스는 강제로 object 클래스를 상속받음
- 자바 클래스 계층구조의 최상위 클래스
object클래스의 주요 메소드는 다음과 같다
boolean equals(Object obj) | obj가 가리키는 객체와 현재 객체 비교 |
Class getClass() | 현 객체의 런타임 클래스 리턴 |
int hashCode() | 현 객체의 해시코드값 리턴 |
String toString() | 현 객체에 대한 문자열표현을 리턴(객체를 문자열로 변환) |
- 레퍼런스가 가리키는 객체의 클래스명 알고싶을땐 레퍼런스명.getClass().getName()
- String toStirng() : 각 클래스는 이 메소드를 오버라이딩하여 자신만의 문자열을 리턴할 수 있다
//풀었던 족보 문제 (전화기) - getclass.getname으로 풀어도 될듯? if문 순서 고려 안해도 될듯
<객체를 문자열로 변환 : toString() >
- 개발자는 object의 toString()을 오버라이딩, 즉 자신만의 toString() 을 작성하여 사용한다
toString 의 리턴값을 자신이 원하는 형식으로 오버라이딩 해두면(출력문 가로 안에 쓸때랑 똑같이 쓰면 되는듯) p.toString 으로 호출하지 않아도 p나 p+문자열 (객체 / 객체+문자열)을 호출할 때 자동으로 tostring으로 변환된다
<equals>
- == 연산자로 객체를 비교하면 객체의 레퍼런스를 비교하고 (내용이 같아도 가리키는 객체가 다른 객체면 다르다고 판단) eqauls() 로 비교하면 내용을 비교한다 => 문자열 비교에는 equals() 사용한다
- 단순 문자열 비교가 아닌 두 객체가 같은 내용인지 아닌지 판단할 때는(객체가 언제 같은건지에 대한 기준을 설정해주어야 할 때) eqauls()를 오버라이딩하여 사용한다
1) 인자로 받은 obj를 point 형으로 형변환 - 이건 굳이? 싶긴 하다
2)equals() 의 리턴타입은 boolean
3)함수 사용 시에 객체. 으로 호출하여 쓸거기 때문에 if문 안에 그냥 x라고 써주면 됨(point 객체는 x,y멤버를 갖고있을거니까)
//6-4 풀기
<wrapper 클래스> : wrapper 객체 생성, wrapper 객체의 기본타입 값 알아내기 , 문자열을 기본타입으로 변환하기, 기본타입을 문자열로 변환하기, wrapper 객체의 값을 기본타입 변수에 대입하기
- 기본타입을 객체로 다루기 위해 클래스화한 8개의 클래스를 wrapper 클래스라고 한다
<wrappe 객체 생성 : valueOf() >
- 객체 생성 시엔 valueof 사용하여 가로 안의 값을 객체로 생성
- 위의 방법 외에 문자열 안의 값을 객체로 만들 수도 있다 (character 제외)
- float 객체는 기본형 중 double 타입의 값으로도 생성이 가능하다
- wrapper클래스명 변수명 = wrapper클래스명.valueof( 기본타입 값 or 문자열) 의 형식으로 객체를 생성한다
<wrappper클래스 중 Integer 클래스의 주요 메소드>
*valueOf는 래퍼객체를 리턴하는 거임 ! 일반형 변수에 대입할 때 말고 객체 생성시에만 쓰는게 맞을듯
# 기본형 타입의 값으로 wrapper 객체 생성하기 -> (래퍼클래스) (객체레퍼런스변수명) = 래퍼클래스.valueOf(기본형값)
# wrapper 객체의 값을 다른 기본형 변수에 넣기 -> 문자열 ! (parse는 문자열만,valueof는 기본형과 문자열만 지원)
-> 기본자료형이름 변수명 = 기본자료형의래퍼클래스.parse자료형(객체명.toString())
# wrapper 객체의 값을 String 형 변수에 넣기 -> String s = 객체명.toString()
# String 형 변수의 값을 다른 일반형 변수에 넣기
-> 기본자료형이름 변수명 = 기본자료형의래퍼클래스.parse자료형(s)
- intValue() : int 타입으로 값 리턴
- parseInt(string s) : 문자열을 정수로 변환한 값 리턴
- toString(int i) : 정수 i 를 문자열로 변환하여 리턴 / toString()은 wrapper객체명.toString() 으로도 사용가능
- valueOf(int i) : 정수 i를 담은 Integer 객체 리턴
- valueOf(string s) : 문자열 s를 정수로 변환하여 담고있는 integer객체 리턴
<wrapper 객체에서 기본타입 값 알아내기 : intValue() / 문자열을 기본타입으로 변환 : parseInt() / 기본타입 or wrapper객체를 문자열로 변환 : toString() >
1)wrapper 객체에서 기본타입 값 알아내기 : 기본형Value()
각 클래스마다 윗줄은 객체생성 없이 클래스명. 으로 호출하여 기본형 변수의 값으로 wrapper 객체를 만듬
밑줄은 만들어진 객체의 기본타입 값 조회 -> 객체명.기본형이름Value() 로 호출
2)문자열을 기본 데이터 타입으로 변환 : 클래스명. 으로 호출하여 parse클래스명() 사용
3)기본 타입을 문자열로 변환 : 클래스명. 으로 호출하여 toString() 사용
<박싱과 언박싱>
박싱 : 기본타입의 값을 wrapper 객체로 변환 -> Integer i = Integer.valueOf(10);
언박싱 : wrapper 객체에 들어있는 기본타입 값을 빼내기 -> int n = i.intValue();
자동 박싱 : Integer i = 10;
자동 언방싱 : int n = i;
<String>
1) 생성 방법 : 리터럴로 생성 / 생성자 이용
- 리터럴로 생성 : String s = "hi";
- 생성자 이용 : String s = new String("hi"); / char 배열을 매개변수에 넣어서 문자열로 만들수도 있음
<String 주요 메소드>
1) 문자열 비교 : eqauls() 혹은 compareTo(String anotherString)
compareTo : 문자열이 같으면 0 리턴, 이 문자열이 비교문자열보다 사전에 먼저 나오면 음수, 나중에 나오면 양수 리턴
2) 문자열 연결 : +연잔자 혹은 concat(String str) 메소드 사용
3) 공백 제거 : 객체레퍼런스명.trim() -> 문자열 앞뒤 공백문자 (tab,enter,space)를 제거한 문자열을 리턴
4)문자열의 문자 : 객체레퍼런스명.charAt(index)
5)문자열 치환 : replace(target, replacement) : 꼭 홑문자 아니어도 가능함
6)대소문자 교체 : toLowerCase(), toUpperCase()
<StringBuffer 클래스> : 가변크기의 문자열 저장 클래스
- Java.lang.StringBuffer
- string클래스와 달리 문자열 변경 가능
- StringBuffer 객체의 크기는 스트링 길이에 따라 가변적
- 생성 : StringBuffer sb = new StringBuffer("java");
<주요 메소드>
1)append(String str), append(StringBuffer sb) : 매개변수를 현재 스트링버퍼에 덧붙임
2)int capacity() : 스트링버퍼의 현재크기 리턴
3)StringBuffer delete(int start,int end) : start위치에서 end위치 앞까지 문자열 삭제
4)insert(int offset,string str) : str을 스트링 버퍼의 offset위치에 삽입
5)replace(int sstart,int end,str) ; 스트링버퍼 내의 start위치의 문자부터 end가 지정하는 문자 앞의 서브스트링을 str로 대치
6)reverse() : 문자들을 반대순서로 변경
7)setLength(int newLeng) : 스트링 버퍼 내 문자열 길이를 newleng으로 설정, 현재 길이보다 크면 널문자(공백)으로 채우며 작은 경우는 기존 문자열이 잘린다
<StringTokenizer 클래스> : 하나의 문자열을 여러 문자열로 분리할 때 사용
- 문자열을 분리할 때 사용되는 기준 문자 : 구분 문자 (밑의 예시에선 &가 구분문자)
- 사용법 : string 을 먼저 만들고 그 스트링을 구분자로 쪼갬, 매개변수는 string 이름, 구분자
- 토큰 : 구분문자로 분리된 문자열
- String 클래스의 split(() 메소드를 이용하여 동일하게 구현이 가능함
- 주요 메소드 : countTokens(분리한 토큰 개수 리턴) , hasMoreTokens(다음 토큰 있으면 true) , nextToken(들어있는 다음 토큰 리턴) - hasMoretokens와 nexttokens 같이 와일문으로 써서 출력
<math 클래스> : 산술 연산 메소드 제공, java.lang.Math
- 모든 메소드는 static 타입 : 클래스 이름으로 바로 호출해야함
math클래스를 활용한 난수 발생 : static double random()
-> 0.0~ 1.0 미만의 임의의 double값을 반환함
#객체 안만들고 쓸 메소드는 static !! / static 메소드 사용시에는 . 연산자 사용 안하고 바로 메소드명(매개변수)로 사용
#예외처리 / 다른 클래스에서 사용할때는 클래스명으로 호출 (클래스명.메소드명(매개변수))
1) 정수를 0으로 나누는 경우 : ArithmeticException
2) 배열보다 큰 인덱스로 배열의 원소 접근 : ArrayIndexOutOfBoundsException
3) 정수 입력해야 하는데 문자 입력 ; InputMismatchException
#static은 this 사용 불가능
#this() 로 다른 생성자호출 가능, 생성자 코드의 제일 첫 줄에 있어야 / 괄호 안의 매개변수로 호출할 생성자 선택함
#배열이 리턴값일 때 : int[] / 배열이 매개변수일 때 : int c[] 혹은 int c[] {1,2,3}
#final 클래스와 메소드 - 더이상 상속과 오버라이딩이 불가능
#final 상수 : public (static) final double pi = 3.14;)
#static 필드(변수) : 전역변수 만들고자 할 때(객체 간에 값이 공유되었으면 할 때) 사용
#public이더라도 다른 패키지에서 쓸땐 import.패키지명.클래스명;으로 임포트문 작성해주어야함
#객체 배열은 배열 레퍼런스와 배열 공간 생성 => 각 인덱스 칸마다 객체 생성 => 그 후 이용으로 이뤄짐 (일반형 객체와 다르게 new가 두번 들어간다는 점 기억하기)
#입력받을 때 공백이랑 엔터 중 하나만 나오면 next() 써도 무방하고 공백이랑 엔터가 같이나오면 nextLine() 써야함
#생성자 : 호출은 서브가 먼저, 실행은 슈퍼가 먼저
#호출할 슈퍼클래스 생성자 지정은 super() 로 가능한데 this() 와 마찬가지로 생성자 코드 맨 첫줄에 와야함
#this. 과 super. 은 맨 첫줄에 오지 않아도 됨
#업캐스팅 : 서브클래스 객체의 레퍼런스 타입을 슈퍼클래스로 교체 - 자동으로 됨
예) person p = new student();
서브에서'만' 정의한 변수나 메소드는 못보고, 서브에서 오버라이딩된 메소드는 오버라이딩된채로 실행됨(동적바인딩)
#다운캐스팅 : 슈퍼클래스 객체의 레퍼런스 타입을 서브클래스로 교체 - 명시적으로 해야함
예) student s ;
person p = new person();
s = (student)p;
#instanceof : 겍체레퍼런스 instanceof 클래스명 -> 객체가 해당 클래스이면 true, 아니면 false 출력 / 클래스명은 실제 객체클래스를 포함한 객체클래스의 부모클래스 타입으로 가능
#추상메소드 : 선언되어 있으나 구현되어 있지 않은 메소드 , abstract로 선언
#추상클래스(is kind of) : 추상메소드를 하나라도 가진 클래스 혹은 추상메소드 없지만 추상클래스로 선언된 클래스 - 객체생성 불가, 자식클래스에서 추상메소드 오버라이딩 해야 객체생성 가능 , 일반변수 가능, 추상메소드와 일반메소드 모두 포함, 다중상속 불가능, 생성자 존재
#인터페이스(is able to + should) : 필드(변수)는 상수만 가능 , 메소드는 private,static,default(생략불가),abstract 만 포함, 객체생성은 안되지만 static메소드는 메인메소드에서 객체 생성 없이 사용 가능함 , 다른 인터페이스 상속 가능(extends) , 클래스에 다중상속 가능 , 인터페이스 타입의 레퍼런스 변수 선언 가능, 생성자 없음
#인터페이스 상속받은 추상메소드 구현시엔 접근지정자 public으로
#객체의 클래스명(실체의 클래스명) 알아내야 할 때
)instanceof : 단 클래스타입에 실제 객체의 부모클래스를 넣어도 true로 나오므로 if문 순서가 가장 끝 자식부터여야함
2)getClass().getName() :패키지만 default 라면 if문 상관없이 사용 가능( 바로 실제 객체가 나옴)
#상속 클래스 객체와 부모클래스 객체들을 부모클래스 타입의 배열로 만들었을 때 만약 자식클래스에서만 작성한 메소드를 사용해야 한다면 형변환(다운캐스팅) 해서 사용하면 됨
#object 클래스 주요 메소드 ; boolean equals(문자열 비교에 쓰는게 아니면 오버라이딩 해서 사용), Class getClass, int hashcode, String toString ( 오버라이딩 해서 원하는 형식의 리턴값 만들어서 씀)
#wrapper 클래스 : Byte Short Integer Long Character Float Double Boolean
#기본형 타입의 값으로 wrapper 객체 생성하기 : 래퍼클래스 변수명 = 기본형value(값);
답 : 래퍼클래스 변수명 = valueOf(값)
#wrapper 객체의 값을 다른 기본형 변수에 넣기 : 기본형 변수명 = 변수의래퍼클래스.parse기본형(객체명.toString())
# wrapper 객체의 값을 String 형 변수에 넣기 ; String s = 객체명.toString()
# String 형 변수의 값을 다른 일반형 변수에 넣기 : 기본형 변수명 = 변수의래퍼클래스.parse기본형(stirng s)
#래퍼객체에서 해당 기본형 값을 뽑아낼 때 : 기본형 변수명 = 래퍼객체명.변수명Value()
#기본타입을 문자열로 변환 ; string s = 기본래퍼클래스.toString(" ")
#stringbuffer 생성 : StringBuffer sb = new StringBuffer("java");
<문제모음>
<6장 수업듣고 다시 간단히 정리>
*static 메소드 사용하더라도 클래스가 다르면 클래스. 으로 호출하여 써야함 !!!!!!!!!!
1)object 클래스 : equals() (문자열 비교, 그 외 객체 비교 시에는 오버라이딩해서 사용) , getClass().getName() , hashCode(), toString() (오버라이딩 해서 사용)
2) wrapper 클래스 : Byte Short Ingeger Long Character Float Double Boolean
#기본형 타입의 값으로 wrapper 객체 생성하기 : 래퍼클래스명 변수명 = 래퍼클래스명.valueOf(값)
#wrapper 객체의 값을 종류 다른 기본형 변수에 넣기 : 기본형 변수명 = 기본형의래퍼클래스.parse기본형(객체.toString())
# wrapper 객체의 값을 String 형 변수에 넣기 : String 변수명 = 객체.toString()
# String 형 변수의 값을 다른 일반형 변수에 넣기 : 기본형 변수명 = 기본형의래퍼클래스.parse기본형(s)
#래퍼객체에서 해당 기본형 값을 뽑아낼 때 : 기본형 변수명 = 객체명.기본형value()
#기본타입을 문자열로 변환 : String s = 기본형의래퍼클래스.toString(기본형값)
#문자열로 wrapper 객체 생성( 리터럴) : 래퍼클래스 객체명 = 래퍼클래스명.valueOf(리터럴)
#문자열을 기본 데이터 타입으로 변환 : 기본형 변수명 = 래퍼클래스명.parse기본형(문자열)
3)String 생성 : 리터럴(내용이 같으면 객체 공유) , 생성자(객체 별도)
주요 메소드
4)stringbuffer : 스트링과 비슷하지만 크기와 문자열 내용이 가변적인 클래스임
append : 뒤에 이어붙이기
insert : 해당 인덱스에 문자열 삽입 (7 위치가 is랑 펜슬 사이 공백 - 그 공백 자리에 ' my' 삽입함 , 원래 7위치의 공백은 사라지는게 아니고 뒤로 밀림)
replace : 시작 인덱스부터 끝 인덱스까지 내용을 없애고 그 자리에 문자열로 대치 (8-10은'my' -> 'your'로 바꿈)
따로 대입 없이 그냥 메소드 사용만 하면 해당 sb 객체의 내용이 변경되는듯 / 문자열은 대입해야 변경 !
5)StringTokenizer 클래스 : 구분문자를 기준으로 문자열을 분리하는 클래스
구분문자가 두개일수도 ! 이땐 둘중 하나라도 있으면 구분
6)Math 클래스 : 기본 산술 연산 메소드를 제공하는 클래스 , 모든 메소드가 static(클래스 이름으로 호출)
Math.random() 메소드로 난수 발생 -> 0.0 이상 1.0 미만의 실수 발생
(int)(Math.random()*100+1) -> 1 이상 100 이하의 정수 발생
난수발생은 사진처럼 Random 클래스의 객체를 생성해서도 가능
#static인 경우 바디 있더라도 디폴트 안씀
'언어 공부 내용 정리 > Java' 카테고리의 다른 글
객지프 기말대비 정리 (5장) (0) | 2023.07.15 |
---|---|
객지프 기말대비 정리 (3-4장) (0) | 2023.07.15 |
객지프 중간대비 복습자료 (0) | 2023.07.07 |
자바 BufferedReader BufferedWriter : 빠른 입출력 (ing) (0) | 2023.06.28 |
자바 예외처리 (0) | 2023.06.17 |