JAVA 14강

YEONG EUN LEE (Chloe)·2023년 12월 22일
0

JAVA 기초

목록 보기
19/42
post-thumbnail



	public static void main(String[] args) { // String 고정형 자료형
		// 직접 문자열을 지정(canonical 문자열)
		// 단축(shorthand) 초기화로 객체 생성
		// String은 고정형 자료형이 값이 바뀌면 주소값이 바뀐다.
		String s1 = "Java Korea";
		String s2 = new String("Java Korea");
		
		
		// s2 문자열을 canonical 문자열로 전환
		String s3 = s2.intern(); // 단축 형식과 유사한 것임
		
		// 단축 초기화로 객체 생성
		String s4 = "Java Korea";
		
		System.out.println(">> String 객체가 참조하는 주소가 같은지 비교"); // 2 개가 객체이기 때문에
		System.out.println("s1 == s2 : " + (s1 == s2)); // false // system에는 static이 선언되어 있음.
		System.out.println("s2 == s3 : " + (s2 == s3)); // false
		System.out.println("s1 == s3 : " + (s1 == s3)); // true
		System.out.println("s1 == s4 : " + (s1 == s4)); // true
	
		System.out.println(">> String 데이터 값(내용)이 같은지 비교");
		System.out.println(s1.equals(s2)); // true --> 각각의 인자는 모두 객여야함.문자열 값을 비교하는 연산자(내용을 비교할 때 사용함.)
		System.out.println(s2.equals(s3)); // true---> "Java Korea".equals(s3); 이렇게 적어도 됨.
		System.out.println(s1.equals(s3)); // true
		System.out.println(s1.equals(s4)); // true
		
		System.out.println(">> String 데이터의 해쉬코드"); // 값에 대한 주소반환
		System.out.println(s1.hashCode());
		System.out.println(s2.hashCode());
		System.out.println(s3.hashCode());
		System.out.println(s4.hashCode());
		
		System.out.println(">> String 데이터의 식별해쉬코드"); // 주소값 저장 주소 반환
		System.out.println(System.identityHashCode(s1));
		System.out.println(System.identityHashCode(s2));
		System.out.println(System.identityHashCode(s3));
		System.out.println(System.identityHashCode(s4));
		
		// 해당 객체가 새당 자료형이 맞는지 확인
		String str = "Hello";
		System.out.println(str instanceof String); // 객체가 자료형에 포함되는지 확인하는 것. ---> boolean 형태로 반환 instanceof는 클래스급이상에서 사용하는 것. 기본 자료형에서는 사용할 수 없음. 
//		
//		int a = 5;
//		System.out.println(a instanceof int);
	}
   
public static void main(String[] args) {
	// concat : 문자열 뒤로 추가 추가 형식 : 문자열객체.concat("뒤에 추가할 문자열");
	// String에서 일어나는 모든 자료형은 원본 훼손이 일어나지 않는다.
	String str = new String("Java");
	System.out.println("원본 문자열 : " + str); // String으로 만든 객체는 주소값이 아니라 값을 출력해줌.
	System.out.println(str.hashCode()); // int 자료형으로 반환
	
	System.out.println(str.concat("수업")); // return 타입 확인 ctrl 누르고 클릭, 또는 그냥 마우스 오버해볼것
	System.out.println("concat() 메소드 호출 후 원본 문자열 : " + str);
	System.out.println(str.hashCode());
	System.out.println(str.concat("수업").hashCode()); // int 자료형으로 반환

}
public static void main(String[] args) {
		String str1 = new String("해피썬데이");
		str1 = "  " + str1 + "   ";
		// 배열 요소 하나하나 묶어놓은 것
		// 문자열도 배열과 같음.
		
		System.out.println("공백 추가된 str1의 길이 : " + str1.length());
		str1 = str1.trim();
		System.out.println("공백 제거된 str의 길이 : " + str1.length());
		
		char ch = str1.charAt(2);// 숫자부분이 index 부분!
		// 특정 위치에 있는 문자(char)
		System.out.println(str1 + "의 charAt(2) : " + ch);
		
		// substring(값1) : 값1에 해당되는 인덱스번호의 문자열부터 마지막문자열까지 가져오세요
		// substring(값1, 값2) :
		// 값1에 해당되는 인덱스번호부터 (값2-1)을 한 인덱스번호에 해당되는 문자열까지 가져오세요.
		
		String str2 = str1.substring(3);
		//문자열의 일부분을 발췌
		// 3번 인데스 ~ 끝까지
		System.out.println(str1 + "의 substring(3) : " + str2);
		
		String str3 = str1.substring(2,4);
		//2번 ~ (4-1)번 인덱스
		System.out.println(str1 + "의 substring(2,4) : " + str3);

	}
public class Ex05 {

	public static void main(String[] args) {
		// 문자열 변환 : replace, replaceAll(정규표현식 사용가능)
		// replace("기존 문자열","변경할 문자열");
		String b = "Welcome to Java World";
		System.out.println(b.replace("Java","Computer"));
		System.out.println(b.replaceAll("Java","Computer"));
		System.out.println();
		
		String str = "abcdefghijk";
		System.out.println("result ===> " + str.replaceAll("[avchij]","굿")); // 정규표현식 사용함.[]의 의미는 a|b|c|h|i|j 들만 이것으로 바꿔라
		System.out.println("result ===> " + str.replaceAll("[^avchij]","굿"));//[^]의 의미는 a|b|c|h|i|j 을 제외하고 이것으로 바꿔라
		System.out.println();
		
		String str2 = "abcdefabcghijk";
		System.out.println("result ===> " + str2.replaceAll("[avchij]","굿"));
		System.out.println();
		
		System.out.println("result ===> " + str.replace("a", "굿").replace("b", "굿").replace("c", "굿").replace("h", "굿").replace("i", "굿").replace("j", "굿")); // 체이닝 기법!
		System.out.println("result ===> " + str.replace("abc","굿굿굿").replace("hij","굿굿굿"));
	}

}

복습

static : 정적인, 공유되는 클래스명 접근가능
멤버 필드, 메소드, 초기화 블록 => 멤버가 아니라 멤버로 위장
클래스, 생성자 붙일 수 없음

static 키워드는 this라는 키워드 쓸 수 없음
static void md() {
this 라는 키워드 쓸 수 없음}

void md () {
this라는 키워드 쓸 수 있음}

class Ex{
	int a;
	static int b;

	void setA(int a){
	this.a = a;
	}
	
	void setB(){
	this.b = 5;}
	
	// 아래는 안됨
	static void setB(){
	this.b = 5;} 
	
	//아래는 가능
	static void setB(){
	Ex.b = 5;
	setA(5); // 이건 불가능 setA에 static 붙으면 가능
	}
}
class Coimter{
	static int count ( );
	public Counter( ) { // 생성자 선언문
	count++;
	}
	public static int getCount( ){ // 메소드 선언문 
	return count;
	}
}

public class CounterEx{


	Counter c1 = new Count( );
}
public class Student {
	private int hankno; // 1
	private String name;
	private Student ( ){ } // 2
	public (static) Student getInstance ( ) {
		return new Student(); // 3	
	}
	public void setTakeNo(int hokno){
		this.hokno = hokno;
	}
	public int getHankNo(){
		return hankno;
	} 
}
package one;

public class Ex01{
	public static void main(String[] args){
		Student st1 = new Student(); // 불가함. 생성자가 private으로 선언되어 있기 때문.
		Student st1 = Student.getInstance(); // 객체 생성문. // 3번을 이용해서 객체를 생성하는 것. 단 해당 메서드가 public 이면서 static 기타제어자가 있어야 함.
		Student st2 = Student.getInstance(); // 위와는 다른 주소를 받아와서 객체 생성.
		
	}
}

싱글톤 패턴 ( Singleton ) ---> 꼭 복습하기

: 처음부터 마지막까지 실행되어야 할 객체를 사용하기 위해서 싱글톤 패턴을 사용함. 하지만 너무 많이 만들면 오히려 메모리 저장공간을 많이 차지하기 때문에 바람직하지 않음.
__메모리 낭비를 방지하기 위해서 사용
: 반드시 객체를 한 개만 생성하도록 강제적으로 제한하는 패턴( 형식 --> 정해진 틀이 있다.)

조건 :
1. 반드시 필드에(속성) static 키워드가 붙은 자료형이 내 자신의 클래스인 속성 하나가 선언되어야 함.
2. 반드시 생성자들의 접근제어자 private으로 처리 되어야함.--> 외부에서 객체생성을 하지 못 하도록 하귀 위해서.
3. 반드시 1번의 필드를 반환해 주는 public static 키워드가 붙은 getter 메소드가 존재해야 함.

package two;

public class Student{
	private staic Studnet stu;
	private Student(){};

	public static Studnet getIns(){ // 메인메소드에서 호출하기 위해서 static이 꼭 필요함. 아니면 객체를 만들어서 호출해야하기 때문. 
		// ^ 하지만 위의 경우 기본생성자가 private으로 막혀있어서 안됨. 한 객체를 계속 공유하기 위해서
		if(stu = null) stu = new Studnet();
	return stu;
	 }
}

public calss Main{
	public static void main(Stirng[] args){
 }
}


클래스에 바로 올 수 있는 것 : 속성과 기능
package two;

 class Student{
	private static Student stu; // 멤버변수는 자동초기화 됨 = null --> getInstance()를 실행하면 주소값을 받음.
	
	private Student() {}
//	public static Student getInstance() {
//		return new Student(); // 작동이 되긴하지만 새로운 공간이 생성 및 할당되면서 주소가 새로 바뀌면서 생성됨. // 싱글톤 패턴 위배
//	}

//	public static Student getInstance() {
//		stu = new Student(); // 싱글톤 패턴 위배
//		return stu;
//	}
//	
	public static Student getInstance() {
		if(stu = null) stu = new Student(); // 싱글톤 패턴 위배하지 않음
		return stu;
	}
	

}

public class ExMain{

	public static void main(String[] args) {
		Student st1 = Student.getInstance();
		Student st2 = Student.getInstance();

	}

}

변수들의 생명주기

지역변수 : (탄생) 지역변수가 선언된 시점 (죽음) 지역변수가 포함된 메소드나 생성자의 명령이 모두 종료된 후
인스턴스 변수 (클래스 복제본, 객체): (탄생) 객체가 선언된 시점(== 인스턴스가 선언된 시점) (죽음) 인스턴스가 소멸되는 시점 // 인스턴스 선언 영역 확인

class Ex{
	int a; // 여기서 클래스 종료까지 살아있음 
	// public Ex() {}
	public void md() {
		this.a = a;
	}

	public int getmd() {
		return a;
	}
}
class ExMain{
	public static void main(String[] args){
	Ex e = new Ex();
	e.a; // 호출 가능
	} e.a // 호출 불가
}

static변수 = 클래스변수 = 정적변수 : class가 메모리에 올라가는 시점부터 (컴파일된 시점부터 = 프로그램이 실행되는 시점부터) (종료) 프로그램이 종료되는 시점

UML

: 통합 모델링 언어 (Unified Modeling Language)
--> 개발자가 업무를 할 때 필요한 요소들, 요소들간의 관계 정의, 요소들간의 흐름등을 도식화 할 때 사용하는 다이어그램.

클래스 다이어그램

: 클래스, 인터페이스, 추상클래스들 안에 필요한 속성, 기능 정리, 조건 정리, 해당 요소들 간의 관계 정리
속성 : 변수, 상수, 객체 등 --> [접근제어자] + public, # protected, ~ default, - private [기타제어자] {readOnly} final, _ (밑줄) static 자료형 변수명;
기능 : 메소드, 생성자, 초기화블럭 등

스퀀스 다이어그램

: 요소들이 어떻게 흐르는 지의 절차를 정리

class Ex{
int a;
public final int B;
public static int c;

public void setA(int a) {
this.a = a;
}

public int getA( ){
return a;
}

}

※ 기술 순서

접근제어자 속성명 : 자료형 {옵션}
static 나타내는 밑줄

※ 기능 기술 순서
메소드 -> 접근제어자 메소드명( 매개변수 : 자료형, ) 리턴타입;
생성자 -> 접근제어자 생성자명(매개변수명 : 자료형, )

class Ex{
	int a;
	public int getA( ){
	return a;
	}
}

값은 임시메모리 stack에 저장됨

String str = "파랗다";

String str1 = new String("파랗다");

String str2 = "파랗다";

아이덴티파이어 해시코드 값은 객체주소값. 단축형식으로 생성한 것은 같은 주소값을 반환함.

0개의 댓글