728x90
반응형

<오늘의 학습 - 데이터베이스를 관리하는 방법>

1. 컬렉션

2. 제네릭

3. Vector

4. ArrayList

5. HashMap

 

 

1. 컬렉션 (collection)

▶ 컬렉션(collection)의 개념

  • 요소(element) 객체들의 저장소
    • 객체들의 컨테이너라고도 불린다.
    • 요소의 개수에 따라 크기를 자동으로 조절한다.
    • 요소의 삽입, 삭제에 따른 요소의 위치 자동 이동
  • 고정 크기의 배열을 다루는 어려움을 해소한다.
  • 다양한 객체들의 삽입, 삭제, 검색 등의 관리가 용이하다.

 

※ 주로 ArrayList를 많이 사용하며, HashMap은 다른 것과 조합하여 많이 사용된다.

 

 

▶ Collections 클래스

  • java.util 패키지에 포함된다.
  • 컬렉션에 대해 연산을 수행하고 결과로 컬렉션을 리턴한다.
  • 모든 메소드는 static 타입이기 때문에 클래스 이름으로 바로 호출할 수 있다.
  • 주요 메소드 - Collections.메소드
    1. sort() : 컬렉션에 포함된 요소들을 정렬
    2.  reverse() : 요소의 순서를 거꾸로
    3. max() : 요소들의 최댓값을 찾음
    4. min() : 요소들의 최솟값을 찾음
    5. binarySearch() : 특정 값을 검색
      • ex) Collectios.binarySearch(list명,검색할요소);

 

 

 

 

2.  제네릭 (generics)

  • 제네릭이란, 특정 타입만 다루지 않고 모든 종류의 데이터 타입을 다룰 수 있도록 일반화된 타입 매개 변수를 이용해 클래스나 메소드를 작성하는 기법이다.
  • <E>, <K>, <V> : 타입 매개 변수
    • 요소 타입을 일반화한 타입
  • 제네릭 클래스의 예시
    • 제네릭 스택 : Stack <E>
    • E에 특정 타입으로 구체화
    • 정수만 다루는 스택 : Stack<Integer>
    • 문자열만 다루는 스택 : Stack<String>

 

 

▶ 컬렉션과 제네릭

  • 컬렉션은 제네릭 기법으로 구현된다.
  • 컬렉션의 요소는 객체만 가능하다.
  • 기본적으로 int, char, double 등의 기본 타입은 사용할 수 없다.
  • JDK 1.5부터 자동 박싱/언박싱으로 기본 타입의 값을 객체로 자동 변환한다.

 


▶ 제네릭 클래스와 인터페이스

public class MyClass<T> { //제네릭 클래스 MyClass 선언. T:타입 매개 변수
	T val; //val 타입은 T
	void set(T a) {
		val = a; //T 타입의 값 a를 val에 지정
	}
	T get() {
		return val; //T 타입의 값 val 리턴
	}
}
  • 클래스나 인터페이스 선언부에 일반화된 타입 추가

 

MyClass<String> s;
List<Integer> li;
Vector<String> vs;
  • 제네릭 클래스의 레퍼런스 변수 선언

 


▶ 제네릭 객체 생성 - 구체화(specialization)

  • 제네릭 타입의 클래스에 구체적인 타입을 대입하여 객체 생성
  • 컴파일러에 의해 이루어진다.

 


타입 매개 변수

  • ‘<‘과 ‘>’사이에 하나의 대문자를 타입 매개변수로 사용
  • 많이 사용하는 타입 매개 변수 문자
    • E : Element를 의미하며 컬렉션에서 요소를 표시할 때 많이 사용한다.
    • T : Type을 의미한다.
    • V : Value를 의미한다.
    • K : Key를 의미한다. 
  • 타입 매개변수가 나타내는 타입의 객체 생성 불가능
    • ex) T a = new T(); (X)
  • 타입 매개변수는 나중에 실제 타입으로 구체화
  • 어떤 문자도 매개 변수로 사용 가능

 

 

※ 타입 매개 변수 T를 String으로 구체화

public class MyClass<String> {
	String val; //val 타입은 String
	void set(String a) {
		val = a; //String 타입의 값 a를 val에 지정
	}
	String get() {
		return val; //String 타입의 값 val 리턴
	}
}

 

 

※ 타입 매개 변수에 기본 타입은 사용할 수 없다.

Vector<int> vi = new Vector<int>(); //컵파일 오류. int는 사용 불가

Vector<Integer> vi = new Vector<Integer>(); //정상 코드
  • int 대신 Integer를 사용해야 한다.

 

 


▶ 제네릭 스택 만들기

  • Stack : Last In First Out (LIFO;후입선출)
  • Queue : First In First Out (FIFO;선입선출)

 

▷ 제네릭 클래스 코드

class GStack<T> {
	int tos; 
	Object [] stck;	//무엇이든 다 수용하기 위해 Object로 선언
	
	//생성자
	public GStack() {
		tos = 0; 
		stck = new Object [10];
	}
	
	//값 입력
	public void push(T item) {
		if(tos == 10)
			return; //stck의 크기보다 많은 값을 입력받을 수 없기 때문에 메소드 탈출
		stck[tos] = item;
		tos++;
	}
	
	//값 출력
	public T pop() {
		if(tos == 0)
			return null; //stck에 아무것도 들어있지 않다면 null 반환
		tos--; //값을 넣은 뒤에 tos++;를 했기 때문에 값을 출력하기 전에 tos--을 해주어야 한다.
		return (T)stck[tos]; //값
	}
}

 


▷ main 코드

		GStack<String> stringStack = new GStack<String>(); //T는 String 타입
		
		stringStack.push("seoul");
		stringStack.push("busan");
		stringStack.push("LA");
		
		for(int n=0; n<4; n++)
			System.out.println(stringStack.pop());
		System.out.println();//줄바꿈
		
		GStack<Integer> intStack = new GStack<Integer>(); //T는 Integer 타입
		
		intStack.push(1);
		intStack.push(3);
		intStack.push(5);
		
		for(int n=0; n<3; n++)
			System.out.println(intStack.pop());
  • T에는 String 타입, Integer 타입이 각각 들어간다.

 

▷ stringStack.push 값

tos 값 Object[] stck 값
tos=0 (GStack 생성자 결과) stck[0]="seoul"
tos=1 stck[1]="busan"
tos=2 stck[2]="LA"
tos=3 (tos++의 결과)  

 

▷ stringStack.pop 값

tos 값 Object[] stck 값
tos=2 (tos--의 결과) stck[2]="LAl"
tos=1 stck[1]="busan"
tos=0 stck[0]="seoul"
tos=0 return null

 


▷ 출력 결과

LA
busan
seoul
null

5
3
1

 

 

 

 

다음 학습

 

[JAVA] ★ Vector, ArrayList, HashMap ★ (16일차)

1. 컬렉션 2. 제네릭 3. Vector 4. ArrayList 5. HashMap 3. Vector ▶ Vector 의 특징 java.util.Vector 에서 E 대신 요소로 사용할 특정 타입으로 구체화한다. 여러 객체들을 삽입, 삭제, 검색하는 컨테이너 클래스이

deliciouscode.tistory.com

 

728x90
반응형
728x90
반응형

보완 전 코드

 

[JAVA] 문자열을 정수로 바꾸기

문제 문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요. 예를 들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다. str은 부호(+,-)와 숫자로만 구성되어 있

deliciouscode.tistory.com

보완 전에는 문자열을 문자화시키는 메소드(charAt)만 알고 있었다.

그래서 모든 문자열을 한 글자씩 문자화 시켜서 자릿수만큼 10을 반복하여 곱한 값을 모두 더해 리턴하는 코드를 작성하였다.

하지만 HRD 수업에서 메소드를 배우면서, 이전에 작성한 코드보다 더 짧고 간결한 코드를 작성할 수 있다는 생각이 들어 새로운 코드를 작성하였다.

 

 

문제

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

예를 들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다. str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

 

▶ 제한사항

  • s의 길이는 1 이상 5이하입니다.
  • s의 맨앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져있습니다.
  • s는 "0"으로 시작하지 않습니다.

 

 

1. Solution 코드

class Solution {
    public int solution(String s) {
        int num=0,m=0;
        if(s.charAt(0)=='-'){
            m=1; //문자열의 맨 앞 부분이 마이너스로 시작함을 알려줌
            s=s.replace("-","");
        }
        else if(s.charAt(0)=='+')
            s=s.replace("+","");
        
        num = Integer.parseInt(s);
        
        
        if(m==1)
            return -num;
        else
            return num;
    }
}
  • 문자열의 맨 앞 부분이 "-"나 "+"로 시작될 수 있기 때문에 replace를 이용하여 숫자로만 구성된 문자열으로 만들어준다.
  • 숫자로 구성된 문자열을 정수형으로 바꾸어 반환한다.
  • 문자열의 맨 앞 부분이 "-"로 시작하면 m의 값을 1으로 바꾸어 음수임을 알 수 있다.

 

 

2. Solution 코드

class Solution {
    public int solution(String s) {
        return Integer.parseInt(s);
    }
}
  • Integer.parseIn 을 사용하면 문자열 맨 앞의 "-"가 음수 값으로 적용되는 것을 알게 되었다.
728x90
반응형

'문제 > JAVA' 카테고리의 다른 글

[JAVA] 하샤드 수  (0) 2023.05.30
[JAVA] 정수 제곱근 판별  (0) 2023.05.30
[JAVA] 문자열을 정수로 바꾸기  (2) 2023.05.29
[JAVA] 문자열 내 p와 y의 개수  (0) 2023.05.29
[JAVA] 자연수 뒤집어 배열로 만들기  (0) 2023.05.29
728x90
반응형

<오늘의 학습>

1. 추상클래스

2. 인터페이스

3. 패키지

4. Object 클래스

5. Wrapper 클래스

6. String 객체

7. Math 클래스

 

 

6.  String 객체

▶ 특징

  1. 스트링 생성 방법 - 리터럴로 생성
    • String s = "Hello";
    • JVM이 리터럴을 관리하여 응용프로그램 내에서 공유된다.
  2. String 객체로 생성 - String t = new String("Hello");
    • 힙 메모리에 String 객체 생성
  3. 스트링 객체는 수정이 불가능하다.
  4. 스트링 비교 시 반드시 equals()를 사용해야 한다.
    • equals()로 내용을 비교한다.

 

 

주요 메소드

메소드 설명
char charAt(int index) intdex 인덱스에 있는 문자 값 리턴
int codePointAt(int index) index 인덱스에 있는 유니코드 값 리턴
int length() 스트링의 길이(문자 개수) 리턴
int compareTo(String anotherString) 두 스트링을 사전 순으로 비교하여 두 스트링이 같으면 0, 현 스트링이 anotherString보다 먼저 나오면 음수, 아니면 양수를 리턴
boolean contains(CharSequence s) s에 지정된 문자들을 포함하고 있으면 true 리턴
String replace(charsequence target, Charsequence replacement) target이 지정하는 일련의 문자들을 replacement가 지정하는 문자들로 변경한 스트링 리턴
String[] split(String regex) 정규식 regex에 일치하는 부분을 중심으로 스트링을 분리하고, 분리된 스트링들을 배열로 저장하여 리턴
String trim() 스트링 앞뒤 공백 문자들을 제거한 스트링 리턴.(\t,\n 포함)
String subString(int beginIdex) beginIndex 인덱스부터 시작하는 서브 스트링 리턴
String toLowerCase() 소문자로 변경한 스트링 리턴
String toUpperCase() 대문자로 변경한 스트링 리턴
String concat(String str) 현재 스트링 뒤에 str 스트링을 덧붙인 새로운 스트링 리턴

 

 

 

7.  Math 클래스

▶ 산술 연산 메소드 제공 - java.lang.Math

  • 모든 메소드는 static 타입 : 클래스 이름으로 바로 호출해야 한다.

 

 

▶ 주요 메소드

메소드 설명
static double max(double a, double b) 두 수 a, b 중에서 큰 수를 리턴
static double min(double a, double b) 두 수 a, b 중에서 작은 수를 리턴
static double abs(double a) 실수 a의 절댓값 리턴
static double random() 0.0보다 크거나 같고 1.0보다 작은 임의의 실수를 리턴
static double cos(double a) 실수 a의 cosine 리턴
static double sin(double a) 실수 a의 sine 리턴
static double tan(double a) 실수 a의 tangent 리턴
static double sqrt(double a)
실수 a의 제곱근 리턴
static double exp(double a) e^a 값 리턴
static double ceil(double a) 자릿수 올림. 실수 a보다 크거나 같은 수 중에서 가장 작은 정수를 실수 타입으로 리턴
static double floor(double a) 자릿수 내림. 실수 a보다 작거나 같은 수 중에서 가장 큰 정수를 실수 타입으로 리턴
static long round(double a) 반올림. 실수 a를 소수 첫째 자리에서 반올림한 정수를 long타입으로 반환

 

 

▶ Math 클래스를 활용한 난수 발생

  • java.util.Random 클래스 사용 
  • Random 구구단 실습 예제
 

[JAVA] 배열과 Random (5일차)

1. 배열 2. 이차원 배열 3. 삼차원 배열 4. Random 1. 배열 ▶ 자료형이 같은 자료 여러 개를 한 번에 관리할 수 있으며, 자료가 연속으로 나열된 자료 구조이다. 즉, 동일 자료형의 기억장소 집합체를

deliciouscode.tistory.com

 

  • LOTTO 실습 예제
 

[JAVA] Math.random()을 이용한 LOTTO

문제 로또 번호를 입력 받아 로또 당첨 여부를 확인하시오. 6개를 다 맞추면 1등, 5개를 맞추고 보너스 번호까지 맞추면 2등, 5개만 맞추면 3등, 4개를 맞추면 4등, 3개를 맞추면 5등이다. ▶ 제한사

deliciouscode.tistory.com

 

 

 

단축키

alt+shift+a : 수정 모드로 전환. 여러 줄을 한 번에 수정할 수 있다.

alt+shift+r : 같은 단어를 한 번에 수정할 수 있다.

 

 

 

 


2023년 6월 5일 월요일

<15일차 수업 후기>

드디어 너무나도 배우고 싶었던 자바의 메소드를 학습했다. 당연히 전부 외우면 좋겠지만 다 외우기 어려울 수 있다고 중요한 개념을 몇 개 말씀해주셨다.

그동안 메소드를 많이 알지 못해서 속상하다고 후기에 많이 썼는데 여러 실습들과 오늘의 수업으로 조금은 익숙해진 것 같다. 메소드를 자연스럽게 사용하기 위해서 오늘 배운 내용을 열심히 복습하자.

728x90
반응형
728x90
반응형

문제

public interface ArrayInterface {
	//int array[]={3,5,2,4,1};
	
	//배열의 가장 큰 값과 작은 값의 차이
	int MaxSubMin(int[] a);
	
	//배열의 가장 큰 값을 구해 맨 마지막 값과 위치 바꾸기
	void MaxChange(int[] a);
	
}
  • 인터페이스 ArrayInterface의 추상 메소드를 모두 구현한 클래스 ArrayClass를 작성하시오.
  • 배열의 가장 큰 값과 작은 값의 차이를 반환하는 MaxSubMin 메소드와 배열의 가장 큰 값을 맨 마지막 값의 위치와 변경하는 MaxChange 메소드를 오버라이딩하여 작성하시오.

 

 

▶ ArrayClass코드

public class ArrayClass implements ArrayInterface{
	//배열의 가장 큰 값과 작은 값의 차이 구하기
	@Override
	public int MaxSubMin(int[] a) {
		int MaxIndex=0, MinIndex=0;
		for(int i=1;i<a.length;i++){
			if(a[MaxIndex]<a[i])
				MaxIndex=i;
			if(a[MinIndex]>a[i])
				MinIndex=i;
		}
		return (a[MaxIndex]-a[MinIndex]);
	}//MaxSubMin_end

	//배열의 가장 큰 값을 맨 마지막 값과 위치 바꾸기
	@Override
	public void MaxChange(int[] a) {
		int MaxIndex=0, temp;
		for(int i=1;i<a.length;i++)
			if(a[MaxIndex]<a[i])
				MaxIndex=i;
		
		temp=a[MaxIndex];
		a[MaxIndex]=a[a.length-1];
		a[a.length-1]=temp;
	}//MaxChange_end
}

 

 

▶ main 코드

		ArrayClass a = new ArrayClass();
		int array[]={3,5,2,4,1};
		System.out.println("배열:"+Arrays.toString(array));
		
		//배열의 가장 큰 값과 작은 값의 차이
		System.out.println("배열의 가장 큰 값과 작은 값의 차이:"+a.MaxSubMin(array));
		
		//배열의 가장 큰 값을 맨 마지막 값과 위치 바꾸기
		a.MaxChange(array);
		System.out.println("배열의 가장 큰 값과 마지막 배열 값의 위치 변경:"+Arrays.toString(array));

 

 

▶ 출력 결과

배열:[3, 5, 2, 4, 1]
배열의 가장 큰 값과 작은 값의 차이:4
배열의 가장 큰 값과 마지막 배열 값의 위치 변경:[3, 1, 2, 4, 5]

 

 

 

 

 

 

[JAVA] 추상 클래스와 인터페이스 실습 (15일차)

1. 추상 클래스 2. 인터페이스 3. 패키지 4. Object 클래스 5. Wrapper 클래스 6. String 객체 7. Math 클래스 1. 추상클래스 ▶ Calculator 코드 public abstract class Calculator { public abstract int add(int a, int b); public abstra

deliciouscode.tistory.com

 

728x90
반응형
728x90
반응형

<오늘의 학습>

1. 추상클래스

2. 인터페이스

3. 패키지

4. Object 클래스

5. Wrapper 클래스

6. String 객체

7. Math 클래스

 

 

3.  패키지

다른 패키지에 작성된 클래스 사용

  1. import를 이용하지 않는 경우
    • 소스 내에서 패키지 이름과 클래스 이름의 전체 경로명을 써주어야 한다.
  2. Import를 이용하는 경우
    1. 소스의 시작 부분에 사용하려는 패키지를 명시해야 한다.
      • 소스에는 클래스 명만 명시하면 된다.
    2. 특정 클래스의 경로명만 포함
      • ex) import java.util.Scanner;
    3. 패키지 내의 모든 클래스 포함
      • ex) import java.util.*;
      • *는 현재 패키지 내의 클래스만을 의미하며 하위 패키지의 클래스까지 포함하지 않는다.

 

 

▶ 주요 패키지

  1. java.lang
    • 자바 language 패키지 - 스트링, 수학 함수, 입출력 등 자바 프로그래밍에 필요한 기본적인 클래스와 인터페이스를 제공한다.
    • 자동으로 import되기 때문에 import 문이 필요하지 않다.
  2. java.util
    • 자바 유틸리티 패키지 - 날짜, 시간, 벡터, 해시맵 등과 같은 다양한 유틸리티 클래스와 인터페이스를 제공한다.
  3. java.io
    • 키보드, 모니터, 프린터, 디스크 등에 입출력을 할 수 있는 클래스와 인터페이스를 제공한다.
  4. java.awt
    • 자바 GUI 프로그래밍을 위한 클래스와 인터페이스를 제공한다.
  5. javax.swing
    • 자바 GUI 프로그래밍을 위한 스윙 패키지
    • GUI : 마우스와 같은 입력 도구를 이용하여 사용자가 화면에 편리하게 입출력할 수 있도록 만든 사용자 인터페이스

 

 

 

4.  Object 클래스

▶ 특징

  • java.lang 패키지에 포함된다.
  • 모든 클래스의 슈퍼 클래스이다.
  • 모든 클래스에 강제 상속된다.
  • 모든 객체가 공통으로 가진 속성을 나타내는 메소드를 가지고 있다.

 

주요 메소드

메소드 설명
boolean equals(Object obj) obj가 가리키는 객체와 현재 객체를 비교하여 같으면 true 리턴한다.
String toString() 현재 객체에 대한 문자열 표현을 리턴한다. (객체를 문자열로 반환한다.)
Class getClass() 현재 객체의 런타임 클래스를 리턴한다.
int hashCode() 현재 객체에 대한 해시 코드의 값을 리턴한다.
void notify() 현재 객체에 대해 대기하고 있는 하나의 스레드를 깨운다.
void notifyAll() 현재 객체에 대해 대기하고 있는 모든 스레드를 깨운다.
void wait() 다른 스레드가 깨울 때까지 현재 스레드를 대기하게 한다.

 

※ equals()와 == 연산자 비교

  • == 연산자: 두 개의 레퍼런스를 비교한다.
  • boolean equals(Object obj) : 객체의 내용이 같은지 비교한다.

 

 

5.  Wrapper 클래스

▶ 기본 타입의 값을 객체로 다룰 수 있게 하기 위해 자바의 기본 타입을 클래스화한 클래스

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

 

 

▶ Integer 클래스의 주요 메소드

메소드 설명
static int bitCount(int i) 정수 i의 이진수 표현에서 1의 개수 리턴
int intValue() int 타입으로 값 리턴
long longValue() long 타입으로 값 리턴
short shortValue() short 타입으로 값 리턴
floatValue() float 타입으로 값 리턴
static int paraseInt(String s) 문자열 s를 10진 정수로 반환한 값 리턴
static int paraseInt(String s, int radix) 문자열 s를 지정된 진법의 정수로 변환한 값 리턴
static Integer valueOf(int i) 정수 i를 담은 Integer 객체 리턴
static Integer valueOf(String s) 문자열 s를 정수로 반환하여 담고 있는 Integer 객체 리턴
static String toString(int i) 정수 i를 문자열로 반환하여 리턴
static String toBinaryString(int i) 정수 i를 이진수 표현으로 변환한 문자열 리턴
static String toHexString(int i) 정수 i를 16진수 표현으로 변환한 문자열 리턴
static String toOctalString(int i) 정수 i를 8진수 표현으로 변환한 문자열 리턴

 

 

 

 

다음 학습

https://deliciouscode.tistory.com/61

 

[JAVA] String, Math (15일차)

1. 추상클래스 2. 인터페이스 3. 패키지 4. Object 클래스 5. Wrapper 클래스 6. String 객체 7. Math 클래스 6. String 객체 ▶ 특징 스트링 생성 방법 - 리터럴로 생성 String s = "Hello"; JVM이 리터럴을 관리하여

deliciouscode.tistory.com

 

728x90
반응형

+ Recent posts