[day15]

1. 패키지 package
: 폴더 디렉토리 : 서로관련있는 클래스나 컴파일된 클래스 파일들을 한 곳에 묶어 놓은 것.
JDK는 개발자에게 많은 클래스 파일들을 패키지 형태로 제공 .jar 압축파일로 제공됨

1) 클래스 명
클래스를 지칭할때는 패키지명을 포함하는 경로명을 사용한다.
패키지와 클래스 사이는 점(.) 연산자로 표현

java.lang.Object

2) 패키지 필요성
소스파일을 목적에 맞게 구조적으로 관리하여
유지보수를 편하게 한다.

3) 패키지 사용
기본적으로 클래스 사용시, 패키지 명을 포함한 전체 경로명을 기술해야한다.
ex) Scanner 
java.util.Scanner sc = new java.util.Scanner(System.in);

4) import 문
import 패키지. 클래스명; 
한 패키지에 있는 여러 클래스들을 import 하고자 하는 경우,
import 패키지명.*;
위와같이 클래스명대신 *을 사용하여 선언가능
* : 모든 ~~~

ex)
import java.util.Scanner;
Scanner sc = new Scanner(System.in);

5) package 만들기
package 패키지명; 

이 클래스는 저 패키지 안에 포함되어있다!

dafault package : package 선언하지 않은 경우 현재 디렉토리를 인지함

2. API Apllication Programming Interface
: 자바에서도 제공해주는 기본 패키지 : Java API
JDK 설치하면 개발자들이 사용할 수 있도록 오라클에서 미리 만들어 놓은 많은 클래스들을 패키지로
제공한다.

1) API문서
#Java SE(Standard Edition)
https://docs.oracle.com/en/java/javase/11/docs/api/

#Java EE(웹)
https://docs.oracle.com/javaee/7/api/toc.htm (Java EE7)
https://javaee.github.io/javaee-spec/javadocs/   (Java EE8)

2) API
java.awt : GUI 관련 클래스.
java.beans : == 컴포넌트 클래스
java.io : input/output (I/O) 데이터를 내보내고 들여보내는 것
**java.lang** : 기본패키지 * (자동적으로 import됨 자주쓰는애들)
java.math : 기본연산 이외에 더 큰 다양한 연산등이 필요할때
java.net  : 네트워크 관련
java.nio  : new I/O
java.security : 보안관련 
java.sql  : 데이터 베이스 관련
java.text : 글자 관련 
**java.util** : 배열을 대신하는 클래스 이 곳의 위치, 날짜, 벡터, 해시맵, 간단한 입출력등

javax.~~  : 서포트하는 클래스

그 외,
구글 API : https://console.cloud.google.com/apis/library?project=concise-reserve-268502
네이버 API : https://developers.naver.com/main/
카카오 API : https://developers.kakao.com/
공공데이터 포털 : https://www.data.go.kr/


3. java.lang
import 필요없음.
System 을 비롯하여 문자열, 수학함수, 입출력등 과 같이
자바 프로그래밍에 필요한 기본적인 클래스와 인터페이스 제공한다.

1) Object 클래스 : 최상위 클래스
모든 클래스의 조상, 모든 클래스에 강제로 상속되는 부모.

  clone  : 복사
equals(object 던져주는애): 어떤 객체가 같은 파일인지(주소)
finalize:  비추
hashcode  해쉬코드를 주는 애
toString 해쉬코드 문자열로 주는애 (주로 오버라이딩해서 씀)
wait 쓰레드를 잠재워줌

#주요 메서드
String toString()
boolean equals(Object obj)


2) String 클래스
문자열 클래스
스트링 리터럴은 자바 컴파일러에 의해 모두 String 객체로 처리

#1. 생성자
String() : 기본 생성자, 빈 스트링객체 생성
String(String org): String 타입의 문자열 저장하면서 객체 생성
String(char[] value) : char 배열의 문자들을 스트링 객체로 생성
String(StringBuffer buffer) : 스트링버퍼 문자열을 스트링 객체 생성

3) 스트링 리터널과 new String()
스트링리터널과 new String() 으로 생성된 객체는 서로 다르게 관리된다.
스트링리터널 String str = "hello";
-> 자바 배누에서 리터럴 테이블로 특별 관리하여 동일한 리터럴 공유함.

new String() String Str = new String("hello");
-> new로 생성된 스트링은 다른 객체와 동일하게 heap 메모리에 생성

4) 스트링 객체 수정 불가능
리터럴이던, new String() 이던 수정 불가
수정 => 스트링 객체 만들어 덮어쓰기


5) 주요메서드
 리턴타입  메서드명 설명
char charAt(int idx) : index에 있는 문자 값 char 로 리턴
boolean         equals(String str) : 문자열 비교
int  compaerTo(String other) : 두 문자열을 사전순으로 비교,
같으면 0, 현자문자열이 먼저나오면 음수, 아니면 양수리턴
String concat(String str) : 현재문자열뒤에 str 매개변수 문자열 이어준 
새로운 문자열 리턴
boolean  contains(CharSequence s) : S에 지정된 문자를 포함하면 true, 포함안하면 false 리턴
int  length() : 문자열 길이 리턴
String  replace(CharSequence target, CharSequence replacement)
 : target을 replacemetn로 변경한 문자열 리턴

String[]  split(String regex) :regex 정규식에 일치하는 부분을 구분자로 
문자열을 분할하여 배열로 리턴
*자주씀* String subString(int beginIdx) : beginIdx 인덱스번호부터 끝까지 문자열을 잘라서 리턴
String toLowerCase() : 전체 소문자로 변경해 리턴
String toUppercase() : 전체 대문자로 변경해 리턴
String trim() : 문자열 앞뒤 공백 제거하고 문자열 리턴(중간은 x)

6) StringBuffer 클래스  (우리 수업에는 잘안씀)
문자열 다루는 클래스
String과 다르게 StringBuffer객체는 문자열을 저장하는 가변 버퍼를 가지고 있다.
문자열 수정가능.

7) Wrapper 클래스
: Wrapper 라는 이름의 클래스는 존재하지 않는다
int, char, double 등 의 8개의 기본형을 객체로 다루기위해
JDK에 만들어진 8새의 클래스를 통칭해서 Wrapper 클래스라 함.


기본타입 : byte short int       long char       float double boolean
Wrapper  : Byte Short Integer   Long Character  Float Double Boolean

#1. 객체 생성
클래스명 참조변수명 = new 클래스명(값);

#2. 주요메서드
static int     parseInt(String s) : 문자열을 10진수로 변경
static int     parseInt(String s , int radix) : s를 radix 진법 정수로 변경한 값 리턴
static String toBinaryString(int i) :이진수로 변환한 문자열 리턴
static String  toHexString(int i) :16진수로 변환한 문자열 리턴
static String  toOctalString(int i) :8진수
static String  toString(int i ) :문자열로 리턴

float   floatValue()  : float으로 리턴
int  intValue() : int로 리턴
long longValue() : long으로
shor  shortValue()    : short으로 

#3. 박싱 / 언박싱

<박싱> 10이라는 숫자를 ten이라는 객체에 넣기
Integer ten =  new Integer(10);
int ----------> Integer 객체
10 10


<언박싱>
int n = ten.intValue();

8) Math 클래스
: 수학 관련 클래스
모든 메서드가 static 타입으로 객체생성없이 바로 사용가능
Math.메서드명();


4. java.util
1) Calendar 클래스
: 추상클래스 (객체생성 불가능)
년, 월, 일 요일, 시간, 분, 초, 밀리초 등을 get(),set 메서드를 이용해서 저장하거나
알아낼 수 있는 클래스
1970.1.1.0.0.0 을 기준으로

#1. 객체생성 X
getInstance() 메서드를 통해 Calendar 얻어와서 사용

#2. Calendar의 get(), set() 메서드에 사용되는 상수
YEAR : 년도
DAY_OF_MONTH : 한달의 날짜
MONTH : 달(0~11)  0-> 1월
DAY_OF_WEEK : 한주의 요일
HOUR : 시간 (0~11) 0-> 1시
AM_PM : 오전/오후
HOUR_OF_DAY : 24시간 기준으로 한 시간
MINUTE : 분
SECOND : 초
MILLISECEND : 밀리초 (1초 =1000밀리초)

#3.Gragorian Calendar 클래스
1970.1.1.0.0.0을 기준으로 365.25일 (4년에 1번씩 윤달)


2) Date 클래스 (비추천, 하지만 아직까지많이 쓴다)
: 단일 클래스로 날짜/시간 관련 클래스
1900.1.1.0.0.0을 기준,
1970.1.1.0.0.0을 기준

package day15;

class AClass{}
public class ClassEx41 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Object obj = new Object();
		
		AClass a = new AClass();
		
		System.out.println(a.getClass());
		System.out.println(a.hashCode());
		System.out.println(a.toString());
		System.out.println(a.getClass().getName()+"@"+Integer.toHexString(a.hashCode()));

	}
}
package day15;

class Point{
	int x, y;
	Point(int x , int y){
		this.x = x; this.y =y;
	}
	@Override
	public String toString() {
		return "(" + x + ","+ y + ") ";
		
	@Override
	public boolean equals(Object obj) { //obj가 들고있는 실제 객체가  Point 객체라면
		boolean result = false;     // 형변환해서 담고
		if(obj instanceof Point) {
			Point p = (Point)obj;
			
		}
	
		if(x == obj.x && y == obj.y) { // 형변환 한 p와 현제매서드를 부른 객체와 비교
			result = true;
			
		}
		return result;
	
	}
}
public class ClassEx42 {
	
	
	
	public static void main(String[] args) {
		Point p1 = new Point(1,3);
		Point p2 = new Point(1,3);
		System.out.println(p1.equals(p2)); //주소비교 false
		Point p3 = p1;
		System.out.println(p1.equals(p3)); //주소비교 true
		
		
	}
		static void print(Object obj) {
			System.out.println(obj.getClass().getName());
			System.out.println(obj.hashCode());
			System.out.println(obj.toString());
			System.out.println(obj);
		
		Point p = new Point(2, 5);
		// TODO Auto-generated method stub
		print(p);
		
		Object obj = new Object();
		print(obj);
	}
}

 

 

package day15;

public class ClassEx43 {

	public static void main(String[] args) {
		
		// 리터럴 방식
		String a = "hello" ;
		String b = "hello" ;
		if(a==b) { // 리터럴 방식은 주소가 같아서 ==으로 비교해도 같다고 나옴
				System.out.println("a==b");
				}
		
		if(a.equals(b)) {//문자열 값비교
			System.out.println("a equals b");
		}
		System.out.println();
		//System.out.println(System.identityHashCode(a)); 주소같음
		//System.out.println(System.identityHashCode(b));
		
		// 객체생성
		String c = new String("hello");
		String d = new String("hello");
		if(c==d) {
			System.out.println("c==d");
		}
		
		if(a.equals(b)) {//문자열 값비교
			System.out.println("c equals d");
		}
		//System.out.println(System.identityHashCode(c)); 주소다름
		//System.out.println(System.identityHashCode(d));
		System.out.println();
	
		
		// 문자열을 비교하고 싶다면 == 쓰지말고 equals 써야한다 !!!
		//		==는 주소비교
 	}
}

 

package day15;

public class ClassEx44 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
			String str = "hello";
			char ch	=	str.charAt(2);
			System.out.println(ch);
			
			// 문자열 연결 : concat()
			String str2 = str.concat("java");
			System.out.println(str2);
			
			// 문자열 연결 : + 연산자
			String str3 = str + "java";
			System.out.println(str3);
			
			// 문자열 사전순으로 비교
			String java = "Java";
			String cpp = "C++";
			int res = java.compareTo(cpp);
			System.out.println(res);
			
			// 문자열 앞뒤 공백 제거 : trim()
			String a = "                abcd  efg ";
			String b = " bb            sdfef  d\t";
			System.out.println(a);
			System.out.println(b);
			// 앞뒤 공백제거 
			String c = a.trim();
			String d = b.trim();
			System.out.println(c);
			System.out.println(d);
					
			// 문자열의 길이
			String str4 = "hello";
				System.out.println(str4.length());
			// 문자열 바꾸기
			String str5 = "Apple Tree";
			String str6 = str5.replace("Apple", "Lemon");
				System.out.println(str6);
				
			System.out.println(str6.toLowerCase());
			System.out.println(str6.toUpperCase());
			
			// subString()
			String str7=str6.substring(4); // 시작번호는 포함
			System.out.println(str7);
			String str8 = str6.substring(4, 7);  // 끝번호 포함x(끝번호 전까지 잘라줌)
			System.out.println(str8);
			
			String [] words = {new String("hello"), new String("java"), new String("spring")};
			
			// 정수 -> 문자열
			int value = 100;
			String strValue = String.valueOf(value);
			
			// 정수 -> 문자열
			String strVal = value +"";
			
			// substring() : 파일명 나누기   (확장자 나눌때 자주쓰임)
			String fullName = "Hello.java";
			int index = fullName.lastIndexOf(".");   // 점의 위치를 찾음
			String name = fullName.substring(0,index);
			String ext = fullName.substring(index);
			System.out.println("파일명 : " + name);
			System.out.println("확장자명 : " + ext);
			System.out.println(index);
	}		
}

 

 

 

package day15;

public class ClassEx45 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Integer i = new Integer(10);   // 밑줄은 곧 사라질 기능이다라는거  46class 참고
		// Interger -> int
		int ii = i.intValue();
		System.out.println(ii);
		
		//문자열 -> 기본형
		int num = Integer.parseInt("132");
		boolean bool = Boolean.parseBoolean("true");
		
		//기본형 -> 문자열
		Character c = new Character('c');
		Double d = new Double(3.14);
		d.doubleValue();
		
		
		Boolean b= new Boolean(true);
		
		
		Character cc = new Character('c');
		Double dd = new Double(3.14);
	
		Boolean bb= new Boolean(true);
		
	}
}

 

 

package day15;

public class ClassEx46 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 10;
		Integer ten = n;		//박싱   객체 <= 기본형
		System.out.println(ten);
		
		
		int num = ten+10;			//언박싱 기본형 <= 객체대입 
		System.out.println(num);
		
		Integer i =10; // new integer(10)   // 굳이 객체생성할 필요가없음
		Double d = 3.14;
		Boolean b = true;
		
		// 기본형 사용하듯 사용하면된다. (점 찍으면 api 기능도 있음)
		
	}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts