본문 바로가기

Language/Java

강의 내용 정리 1

 

https://school.programmers.co.kr/learn/courses/9/9-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89

 

자바 중급

자바 입문을 수강했다면 자바의 다양한 기능에 대해 더 알아볼 수 있는 자바 중급을 추천합니다.

school.programmers.co.kr

위 강의 수강 내용을 기억하기 위해 작성합니다.

 

Object 클래스

모든클래스의 최상위 클래스

메소드 중에서 가장 많이 사용되는 것들

equals    객체가 가진 값을 비교할 때 사용

toString    객체가 가진 값을 문자열로 반환

hashCode    객체의 해시코드 값 반환(자료구조에서 많이 사용)

사용할 때 반드시 오버라이딩해서 사용해야함

public class Car{
    String name;
    int number;
    
    public static void main(String[] args){
        Car c1 = new Car();
        c1.name = "ben";
        c1.number = "11";
        
        Car c2 = new Car();
        c2.name = "ben";
        c2.number = "11";
        
        if(c1.equals(c2)){
            // 서로 같이 않다고 뜬다.
        }
        
        c1.hashCode();
        c2.hashCode();
        // 서로 다른 hashCode를 반환한다.
        
        // 현재 equals, hashCode 메소드는 Object가 구현한 것을 그대로 사용하고 있기 때문
        
    }
}

 

Java.lang 패키지

필수적으로 공부해야하는 패키지

 

Wrapper

기본형 타입을 객체로 변환시킬때 사용

타입별로 분류된 클래스들을 모은 것

int i = 5;
Integer i2 = new Integer(5); 
//단순 숫자를 객체형이나 참조형으로 사용하기 위해서 위 i2처럼 선언을 다르게 해야했음

Integer i3 = 5; //오토박싱을 통해 기본형 데이터를 객체형으로 바꿔서 사용 가능하다.

 

오토박싱 : 기본 타입 데이터를 객체 타입의 데이터로 자동 형변환 시켜주는 기능

 

Integer i = 5;

int i2 = i.intValue();
// 반대로 원래는 객체형 데이터를 단순 데이터로 변환 해줘야 했다.

int i3 = i;
// 오토언박싱을 통해 자동으로 형변환이 가능하다.

오토언박싱 : 오토박싱과 반대로 객체 타입의 데이터를 기본형 타입 데이터로 자동 형변환

 

 

StringBuffer

string class는 자기 자신이 변하지 않는 불변 class이다.

stringbuffer class는 자기 자신이 변하는 class이다.

StringBuffer sb = new StringBuffer();
StringBuffer sb2 = sb.append("hello");
// append 메소드는 자기 자신인 this가 반환된다.
// 반환된 것을 sb2가 받았으므로 두 변수는 같다.

메소드 체이닝(Method Chaining) : 자기자신을 리턴하여 계속해서 자신의 메소드를 호출하는 방식

-java에서 자주 사용되는 문법

String str2 = new StringBuffer().append("hello").append(" ").append("world").toString();
// stringbuffer에서 자기 자신을 반환하기 때문에 append()를 계속해서 사용할 수 있다.

 

String

String str1 = "hello world";
String str2 = str1.substring(5);

String str3 = str1 + str2;
// 위 명령을 수행하면 결과적으로 아래와 같이 실행된다.
String str4 = new StringBuffer().append(str1).append(str2).toString();
// stringbuffer 객체를 만들고 append 메소드를 사용해 문자열을 누적하고 String으로 형변환하여 출력한다.

String str5="";
for(int i = 0; i < 100; i++){
	str5 += "*";
}
// 반복문 안에서 문자가 더해질 때 마다 내부적으로 StringBuffer 객체를 만들어 낸다.
// java에서 new 연산자가 많이 사용될수록 느려진다.

StringBuffer sb = new StringBuffer();
for(int i = 0; i < 100; i++){
	sb.append("*");
}
String str6 = sb.toString();
// 위와 같은 방법을 통해 사용하는 것이 더욱 바람직하다.

 

 

Math

생성자 자체가 private으로 되어 있기 때문에 new 연산자를 통해서 객체를 생성할 수 없다.

모든 메소드와 속성이 static으로 정의되어 있기 때문에 객체를 생성하지 않고도 사용할 수 있다.

Math.max(a, b);
Math.min(a, b);
Math.abs(a);
Math.random();
Math.sqrt(a);

 

Java.util 패키지

자료구조 클래스들을 컬렉션 프레임워크라고 함

Collection interface는 자료가 있다라는 것을 표현하며 저장된 순서를 기억하지 못하므로 iterator interface에 의존해서 하나하나 찾아야한다.

Set interface는 중복을 허용하지 않는 자료구조를 표현한 것 Collection을 상속받고 있다. add 메소드가 같은 값이 있으면 false 없으면 true 반환

List interface는 중복을 허용하면서 순서를 기억하는 자료구조를 표현한 것 Collection을 상속받고 있다. get(int x) 메소드를 통해 index 접근 가능하다.

Map interface는 put 메소드 수행 시 key 값과 value 값을 넣어야 하며 모든 key 값은 중복을 허용하지 않는다.

출처 :&nbsp;https://hyuntaekhong.github.io/blog/java-basic25/

 

Generic

제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다. 한마디로 특정(Specific) 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 것이다.

https://st-lab.tistory.com/153

 

자바 [JAVA] - 제네릭(Generic)의 이해

정적언어(C, C++, C#, Java)을 다뤄보신 분이라면 제네릭(Generic)에 대해 잘 알지는 못하더라도 한 번쯤은 들어봤을 것이다. 특히 자료구조 같이 구조체를 직접 만들어 사용할 때 많이 쓰이기도 하고

st-lab.tistory.com

 

set

Set<String> set1 = new HashSet<>(); //Set은 interface이기 때문에 new로 객체를 생성할 수 없음
// 따라서 Set을 구현한 클래스인 HashSet을 이용해서 인스턴스 생성

boolean flag1 = set1.add("kang"); // true
boolean flag2 = set2.add("kang"); // false

Iterator<String> iter = set1.iterator(); // 값을 하나하나 꺼내기 위해서 iterator 사용
while(iter.hasNext()){ // hasNext()를 통해 끝까지 실행 가능
	String str = iter.next();
}

 

List

// java.awt는 클래스로 전혀 다른 부분이다. java.util을 불러와야 한다.
List<String> list = new ArrayList<>(); // Set과 마찬가지로 list는 interface이므로
									   // 그것을 구현하고 있는 ArrayList 클래스를 이용하여 인스턴스 생성
list.add("x");
list.add("y");
list.add("x");
list.size(); // 3

for(int i = 0; i < list.size(); i++){ // List는 index 접근이 가능하다.
	String str = list.get(i);
}

 

Map

Map<String, String> map = new HashMap<>();
map.put("x", "y");
map.put("x1", "y2");
map.put("x", "y1");

map.size(); // 2

map.get("x"); // y1 같은 키에 또다시 입력을 받으면 최근에 들어온 값으로 바꿔줌

Set<String> keys = map.keySet(); 
Iterator<Stirng> iter = keys.iterator();

while(iter.hasNext()){ //전체 출력
	String key = iter.next();
    String value = map.get(key);
}

'Language > Java' 카테고리의 다른 글

Java의 정석 정리 3  (0) 2023.09.15
Java의 정석 정리 2  (0) 2023.09.10
Java의 정석 정리  (0) 2023.09.07
강의 내용 정리 2  (0) 2023.03.08
기초 내용 정리 모음  (2) 2023.02.22