java 요약노트

개미Coder
|2024. 5. 8. 10:05
반응형

-이 글은 학원에서 진행하는 수업과 코딩팩토리 블로그를 참고하여 작성하였습니다.

날짜 구하기 (Calendar)

Calendar cal = Calendar.getInstance();

// 현재년도

int thisYear = cal.get(Calendar.YEAR);

 

// 0 : 1월 1 : 2월

int current_month = cal.get(Calendar.MONTH) + 1;

 

int current_day = cal.get(Calendar.DATE); // DAY_OF_MONTH

 

난수 구하기 (Random)

// 난수관리객체 (F4를 누르면 메서드 목록이 나온다)

Random random = new Random();

 

// 1~45 난수발생

int num = (random.nextInt(45)+1); // nextInt(n) : 0 ~ (n-1)

 

printf Formatter

- "a" + "b" + "c" + "d" 이런식으로 문자열을 더하는것은 객체를 새로 생성해서 메모리를 계속 사용하기에 옳지 않다.

String str = String.format("%s%s%s%s", "a","b","c","d");

System.out.printf("이름 : %s\n나이 : %d(살)\n신장 : %.1f(cm)\n기혼 : %b\n", name, age, length, bMarried);

 

%를 printf에 표현해주고 싶으면, %%로 표기하면 %가 올바르게 문자로 출력된다.

 

 

 

다형성 개념

// up-casting

Shape s1 = new Nemo();

Shape s2 = new Circle();

Shape s3 = new Triangle();

 

// 상속 객체는 부모를 포함해서 만든다.

Shape [] shape_array = {s1, s2 ,s3};

// 다형성(Polymorphism)

// 동일한 명령에 대해서 동작하는 객체가 자신만의 명령을 수행

for(Shape shape : shape_array) {

shape.draw();

 

★ 추상 클래스와 인터페이스는 객체 생성을 하지 못한다.

- 추상 클래스를 사용하는 이유는 표준화이다. (객체를 사용할 때 기준을 잡아주는 것이다)

- 클래스 : 설계도, 인터페이스 : 사용 설명서 (사용자가 필요하다)

 

▶다형성 : 쉬는 시간 되면 잠깐 쉬었다 하겠습니다.

- 명령을 하면, 다양하게 행동을 하게 되는 것

- 일일이 해야하는 것을 정해주게 되면 너무 시간이 길어진다.

- 상위 명령을 하나 툭 던져주면 각자 그 명령을 받아서 개개인의 행동을 정하고 수행한다.

※ 도형이니까 너 그냥 그려 (draw) 삼각형은 알아서 삼각형으로, 사각형은 알아서 사각형으로 각자 할 행동들을 만들어서 수행한다.

- 전달하는 명령은 동일하지만 (draw) 각각의 상속받은 클래스들에 오버라이딩 되어 있는 (draw) 명령으로 실행이 되는 것

 

▶캡슐화 : 사용자는 리모콘이 어떤 원리로 작용하고 동작하는지 모르고, 그냥 사용법만 알면 된다.

인터페이스와 클래스의 용도는 분명히 다르다.

추상 클래스 : 제품 생산 (이런 제품들은 이런 기능이 있어야해 하면서 만드는 것)

인터페이스 : 메뉴얼 (사용방법)

-> 클래스는 일일이 인스턴스 멤버와 메서드를 만들어서 그 제품 자체를 만드는데,

인터페이스는 그냥 사용방법만 알고 그 사용방법대로만 쓰면 된다.

 

 

윈도우 Window 호출하기 및 템플릿 Template 저장

// awt(Abstract Window Toolkit) package : 윈도우에 관련된 기능들이 들어있다.

// Frame <- awt

// ㄴ JFrame <- swing (더성능이 개선)

public class MyWin extends JFrame {

 

public MyWin() {

// 여기서 초기화 하라, 생성자는 초기화하는 역할 (Constructor)

// super()은 부모의 생성자이다.

// JFrame() call 1. 부모님 생성자 초기화 2. 자신의 생성자 초기화

super("내가 만들어본 첫번째 윈도우"); // JFrame(String title) call

// 위치 x y

super.setLocation(300, 500);

 

// 크기

super.setSize(400, 500);

 

// 보여줘라

super.setVisible(true);

 

// 종료

super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

 

IO InputStream으로 출력하기

public static void main(String[] args) throws Exception {

 

String str_url = "https://www.naver.com/";

URL url = new URL(str_url);

 

InputStream is = url.openStream();

InputStreamReader isr = new InputStreamReader(is,"UTF-8");

BufferedReader br = new BufferedReader(isr);

 

String data;

 

while(true) {

data = br.readLine();

if(data==null) break;

System.out.println(data);

}//while-end

 

}//main-end

 

 

문자열 치환 replace replaceall

String a = "무궁화 삼천리 화려강산 대한사람 대한으로 길이보전하세";

a = a.replace("삼천", "사천");

System.out.println(a);

// 결과값 : 무궁화 사천리 화려강산 대한사람 대한으로 길이보전하세

 

String a2 = "무궁화 삼천리 화려강산 대한사람 대한으로 길이보전하세";

a2 = a2.replaceAll(".", "ㄱㄱ");

System.out.println(a2);

// 결과값 : ㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱ

 

 

substring으로 원하는 문자열만 출력하기

// String 클래스 자체가 char 여러 개를 붙여놓은 효과를 주기 때문에 String =

char 배열이라고 생각해도 무방하다.

String str = "ABCDEFG"; // 대상 문자열

/* A=0 B=1 C=2 D=3 E=4 F=5 G=6의 index를 가진다.*/

 

str.substring(3);

/* substring(시작위치) 결과값 = DEFG */

 

str.substring(3, 6);

/* substring(시작위치, 끝위치) 결과값 = DEF */

 

// 2. 특정문자 이후의 문자열 제거

String str2 = "ABCD/DEFGH";

String result2 = str2.substring(str.lastIndexOf("/") +1);

System.out.println(result2);

// 결과값 : DEFGH

 

// 3. 특정단어 (부분)만 자르기

String str3 = "바나나 : 1000원, 사과 : 2000원, 배 : 3000원";

String target = "사과";

// indexOf(문자열) : 문자열이 몇번째 인덱스에서 시작(위치)하는지 찾아준다.

int target_num = str3.indexOf(target); // target_num = 13

 

int target_won = str3.substring(target_num).indexOf("원");

// (13, 9+13)

String result3 = str3.substring(target_num, (str3.substring(target_num).indexOf("원") + target_num));

System.out.println(result3 + "원");

 

 

indexOf

indexOf 함수는 문자열 안에 내가 찾고 싶은 문자열이 있는지 확인해 주는 함수이다.

찾는 문자열이 없으면 -1을 리턴하고, 찾고 싶은 문자열이 있으면 index의 위치를 리턴해준다.

메소드
사용처

indexOf() 대상 문자열에서 찾고자 하는 문자의 index값을 찾고 싶을 때
contains() 대상 문자열에서 찾고자 하는 문자열이 포함되어있는지 여부를 알고 싶을 때
matches() 대상 문자열에서 정규표현식(숫자, 영문자, 한글)뜽이 포함되어있는지 여부를 알고 싶을 때

 


사용법

설명
indexOf(String str) 대상문자열에 인자값으로 주어지는 String값이 있는지 검색한다.
indexOf(char ch) 대상문자열에 인자값으로 주어지는 char값이 있는지 검색한다.
indexOf(String str, int fromIndex) 대상문자열에 첫번째 인자값으로 주어지는 String값이 있는지 두번째 인자값의 index부터 검색한다.
indexOf(char ch, int fromIndex) 대상문자열에 첫번째 인자값으로 주어지는 char값이 있는지 두번째 인자값의 index부터 검색한다.

 

String s = "Hello welcome to the this place";
System.out.println(s.indexOf("welcome"));	// 문자열 검색
System.out.println(s.indexOf("t"));	// 단어 검색
System.out.println(s.indexOf("welcome", 10));	// 문자열을 10번째 index부터 검색
System.out.println(s.indexOf("t", 15));	// 단어 15번째 index부터 검색

if(s.indexOf("welcome") !=-1) {
    System.out.println("문자가 포함되어 있습니다.");
} else {
    System.out.println("문자가 포함되어 있지 않습니다.");
}

 

contains (문자열에 문자가 포함되어 있으면 true, 없으면 false)

String s = "Hello welcome to the this place";

if(s.contains("welcome")) {
    System.out.println("문자가 포함되어 있습니다.");
} else {
    System.out.println("문자가 포함되어 있지 않습니다.");
}

// 결과값 : 문자가 포함되어 있습니다.

 

 

matches (문자열에 문자가 포함되어 있으면 true, 없으면 false)

String s = "Hello welcome to the this place";

//특정 문자열 검색
if(s.matches(".*welcome.*")) {
    System.out.println("문자가 포함되어 있습니다.");
} else {
    System.out.println("문자가 포함되어 있지 않습니다.");
}

//영문자가 있는지 검색
if(s.matches(".*[a-zA-z].*")) {
    System.out.println("문자가 포함되어 있습니다.");
} else {
    System.out.println("문자가 포함되어 있지 않습니다.");
}

//숫자가 있는지 검색
if(s.matches(".*[0-9].*")) {
    System.out.println("문자가 포함되어 있습니다.");
} else {
    System.out.println("문자가 포함되어 있지 않습니다.");
}

결과값 : 문자가 포함되어 있습니다
문자가 포함되어 있습니다
문자가 포함되어 있지 않습니다

 

 

split

// 문법
// 문자열배열 = 대상문자열.split("기준문자");

// 예제
String str = "";

for(int i =1;i<5;i++) {
    str += i+"#";
}
System.out.println(str);
String [] array = str.split("#");

for(int i=0;i<array.length;i++) {
    System.out.println(array[i]);
}

 

// 1. 쉼표(,)로 문자열 잘라서 배열에 넣기
String str2 = "A,B,C,D";
String [] array2 = str2.split(",");
for(int i = 0;i<array2.length;i++) {
    System.out.print(array2[i]);
}
// 결과값 : ABCD

 

// 2. 공백(" ")으로 문자열 잘라서 배열에 넣기
String str3 = "동해물과 백두산이 마르고 닳도록 하나님이 보우하사 우리나라 만세";
String[] array3 = str3.split(" ");

// 출력
for(int i = 0; i < array3.length; i++) {
    System.out.println("array[i] = " + array3[i]);
}

 

// ArrayList에 split으로 배열넣기

String str = "이/나라의/모든/국민들이/행복해지길/소망합니다";

String [] array = str.split("/");

List<String> array2 = new ArrayList<String>(Arrays.asList(array));

System.out.println(array2);

for (String list : array2) {

System.out.println(list);

}

 

String에 문자열 붙이기

 

- 보편적인 방법

String a = "첫번째 텍스트입니다.";
String b = "두번째 텍스트입니다.";

System.out.println(a+b);
//결과값 : 첫번째 텍스트입니다. 두번째 텍스트입니다.
// concat을 사용해서 붙이는 방법

String a = "첫번째 텍스트입니다.";
String b = "두번째 텍스트입니다.";

System.out.println(a.concat(b));
//결과값 : 첫번째 텍스트입니다. 두번째 텍스트입니다.

 

 

StringBuffer와 StringBuilder의 차이점

String : 할당된 공간이 변하지 않음(불변 immutable)

StringBuffer, StringBuilder : 객체의 공간이 부족해지는 경우 버퍼의 크기를 유연하게 늘려줌(가변 mutable)

StringBuffer : 각 메소드 별로 synchronized keyword가 존재하여 멀티 스레드 상태에서 동기화를 지원

StringBuilder : 단일 스레드 환경에서만 사용하도록 설계되어 있음.

(속도는 빌더가 더 빠르지만, 현업에서는 언제 멀티스레드 환경에서 돌아가지 알지 못하기에 버퍼로 통일하는게 좋다)

 

이거 쓰는 이유 : String으로 문자열 추가하려면 새로운 객체를 또 만들어서 메모리 낭비가 심하기 때문이다.

결론 : 문자열 연산이 많을때 버퍼나 빌더를 사용하자.

 

String s = "abcdefg";
StringBuilder sb = new StringBuilder(s);

System.out.println("처음 상태 : " + sb); //처음상태 : abcdefg
System.out.println("문자열 String 변환 : " + sb.toString()); //String 변환하기
System.out.println("문자열 추출 : " + sb.substring(2,4)); //문자열 추출하기
System.out.println("문자열 추가 : " + sb.insert(2,"추가")); //문자열 추가하기
System.out.println("문자열 삭제 : " + sb.delete(2,4)); //문자열 삭제하기
System.out.println("문자열 연결 : " + sb.append("hijk")); //문자열 붙이기
System.out.println("문자열의 길이 : " + sb.length()); //문자열의 길이구하기
System.out.println("용량의 크기 : " + sb.capacity()); //용량의 크기 구하기
System.out.println("문자열 역순 변경 : " + sb.reverse()); //문자열 뒤집기
System.out.println("마지막 상태 : " + sb); //마지막상태 : kjihgfedcba

 

 

 

- 임의로 배열을 변경시킨 뒤에, 그 구간만 다시 내림차순으로 정렬하는 방법

public static void selectionSortDesc(int [] array, int beginIndex, int toIndex) {

    for(int i = beginIndex; i < toIndex-1; i++) { // i = selection
        for(int k = i+1; k < toIndex; k++) { // k = move

            if(array[i] < array[k]) {
                // 교환
                int tmp = array[i];
                array[i] = array[k];
                array[k]= tmp;
            }
        }//end-for-k
    }//end-for-i
}//end-selectionSortAsc

public static void insertionSortDesc(int [] array,  int beginIndex, int toIndex) {
    int k;
    int key; // i = 1~8
    for(int i = beginIndex+1; i < toIndex; i++) { // i = key
        key = array[i];
        // key 값이 들어갈 자리를 찾는다
        for(k = i-1; k >= 0; k--) {
            if(array[k] < key) {
                array[k+1] = array[k];
            } else {
                break;
            }//end-for2
        }//end-for1
        array[k+1] = key;
    }//end-insertionSortAsc
}

public static void bubbleSortDesc(int [] array, int beginIndex, int toIndex) {
    for(int i=beginIndex-1; i<toIndex; i++) {

        for(int k=i-1; k<toIndex-i; k++) {

            if(array[k] < array[k+1]) {
                int im = array[k];
                array[k] = array[k+1];
                array[k+1] = im;
            }
        }
    }
}


}
package mymain;

import java.util.Arrays;

import util.MyArrays;

public class _16_Exam16_정렬_Overload {

	public static void main(String[] args) {

		int [] arr = {5, 4, 3, 1, 2, 9, 8, 7,6};
		
		System.out.println("---[sorted]---");
		//Arrays.sort(arr);
		MyArrays.insertionSortDesc(arr);
		for(int n : arr) {
			System.out.printf("%3d", n);
		}
		System.out.println();
		
		System.out.println("---[sort(arr, 2, 6)]---");
		Arrays.sort(arr, 2, 6);
		for(int n : arr) {
			System.out.printf("%3d", n);
		}
		System.out.println();
		
		// selectionSortDesc 방법
//		System.out.println("---[sort(arr, 2, 6)]---");
//		MyArrays.selectionSortDesc(arr, 2, 6);
//		for(int n : arr) {
//			System.out.printf("%3d", n);
//		}
//		System.out.println();
		
		// insertionSortDesc 방법
//		System.out.println("---[sort(arr, 2, 6)]---");
//		MyArrays.insertionSortDesc(arr, 2, 6);
//		for(int n : arr) {
//			System.out.printf("%3d", n);
//		}
		
		// bubbleSortDesc 방법
		System.out.println("---[sort(arr, 2, 6)]---");
		MyArrays.bubbleSortDesc(arr, 2, 6);
		for(int n : arr) {
			System.out.printf("%3d", n);
		}

	}//end-main
}
반응형

'java(2)↗' 카테고리의 다른 글

java 이클립스 템플릿 Template  (0) 2024.05.08
java 람다식(+다형성 추가 설명)  (0) 2024.05.08
java 보충수업  (0) 2024.05.07
java 컬렉션 프레임워크 (Set, Map)  (0) 2024.05.03
java 컬렉션 프레임워크(List)  (0) 2024.05.03