본문 바로가기

WINK-(Web & App)/JAVA 스터디

[2024-2 Java 스터디] #1주차 이서영

반응형

1. Java

→ 객체 지향 프로그래밍 언어

 

O

- 웹 프로그래밍

- 안드로이드 애플리케이션 개발

- 게임 개발

- 데이터베이스 처리

- 빅 데이터 및 분산 처리

 

X

- 시스템 프로그래밍

- 높은 성능 요구 프로젝트

- iOS 애플리케이션 개발

 

라이브러리

→ 재사용 가능한 코드조작 or 함수들 의 모음

 처음부터 다시 작성할 필요없이 해당 기능을 빠르게 구현 가능

 

프레임워크

→ 목적에 필요한 것을 일괄로 가져다 쓰도록 만든 구조화 된 틀

 

 

JAVA에서 클래스란?

클래스

→ 프로그램에서 사용된 객체의 을 정의

객체를 생성하기 위한 설계도 역할

→ 여러가지 멤버변수(클래스 내에서 사용되는 변수)와 메서드(클래스 내에서 사용되는 함수)포함

 

생성자

: 클래스로부터 객체를 생성할 때 호출됨, 객체의 초기화

 

디렉터리

: 폴더

 

JAVAC?

→ 자바 컴파일의 줄임말

→ 컴파일 : 프로그래머가 작성한 코드를 기계어로 번역

 

 

 

 

2. 변수와 자료형

변수

→ 값을 대입해서 사용가능 (빈 상자)

→ 값은 어떤 형태가 정해져야함 형태 = 자료형

 

변수이름 규칙

1. 숫자 시작 X

2. _ $ 외의 특수문자 X

3. int, class ... 등 자바의 키워드 X

 

자료형

→ 변수의 형태 정해줌

ex)

int a; // 변수 a의 자료형은 int이다

이때 a라는 변수에는 int 자료형 값으로 1, 10 같은 정수만 가능

 

변수에 값 대입하기 

→ '=' 기호 사용 (= 는 대입연산자)

 

 

 

3. 이름짓기

 

클래스

→ 명사

→ 대문자로 시작

→ 여러개의 단어 조합 시, 각 단어의 첫번째 글자는 대문자

ex)

class ChocoCookie {}

 

메서드

→ 동사

→ 소문자로 시작

→ 여러개의 단어 조합 시, 맨 첫 글자 제외 각 단어의 첫번째 글자는 대문자

ex)

run(); getBackground();

 

변수

→ 이름만 봐도 내용을 알 수 있게

→ 순서를 의미하는 임시 정수 : i j k m n  문자 : c d e

→ 변수명에 _ $ 가능하지만 시작문자로는 지양

ex)

String userName;

int i; //주로 반복문

 

 

4. 주석

→ 자바 코드에 프로그래머의 의견이나 코드의 설명

→ 작성한 코드의 특정부분을 잠시 사용하지 않게 할 때도 사용

→ 프로그램 코드에 삽입하더라도 프로그램을 수행하는 데 영향 X (컴파일 할 때 자동으로 제거됨)

→ 누구나 알 만한 내용 주석 X (코드를 지저분하게 만듬)

→ 코드 수정하면 주석도 수정, 코드 바뀌면 주석도 바꾸기

 

블록주석

/*
블록주석입니다 이예잉
*/

 

→ 코드에서 블록 단위(클래스, 메서드 등) 설명할 때 사용

 

라인 주석

// 라인 주석입니다 ^0^

 

→ 코드 한 줄 설명 할 때 사용

 

 

 

5. 자료형

→ 데이터의 종류, 크기 결정하는 기본 구성 요소

→ 숫자, 문자열처럼 자료형태로 사용하는 모든 것

 

5-1. 숫자

 

정수

int : -2147483648 ~ 2147483647 

long : - 9223372036854775808 ~ 9223372036854775807

long 자료형 변수의 값이 int 자료형의 최대값보다 크면 끝에 접미사 L자를 붙여줘야함(안하면 오류뜸)

int cake = 10;
long age = 8764827384923849L; // 소문자 l도 가능하지만 1과 헷갈림 하지마셈

 

실수

float : -3.4*10^38 ~ 3.4*10^38

double : -1.7 * 10^308 ~ 1.7 * 10^308

flaot 변수에 값 대입할 때 접미사 F붙여야함(안하면 오류뜸)

float pi = 3.14F; // 소문자 f 가능 
double morePi = 3.14159265358979323846;
double d1 = 123.4;
double d2 = 1.234e2; //e2는 10의 제곱을 의미한다(10^2)

 

8진수, 16진수

int 사용

8진수 : 숫자 0으로 시작

16진수 : 숫자 0과 알파벳 x로 시작

int octal = 023;    // 십진수: 19
int hex = 0xC3;     // 십진수: 195

 

숫자 연산

→ 사칙연산 : + - * /

→ % : 나머지 값 반환


증감연산

→ 증감연산자 사용 ( ++, -- )

int i = 0;
int j = 10;
i++;
j--;

System.out.println(i);  // 1 출력 ++는 변수에 저장된 값을 1만큼 증가
System.out.println(j);  // 9 출력 --는 변수에 저장된 값을 1만큼 감소
int i = 0;
System.out.println(i++);  // 0 출력
System.out.println(i);  // 1 출력

→ ++의 위치에 따라 값이 달라짐

++연산자가 변수명 뒤에 붙으면 코드가 실행되는 순간에는 i값이 변경 x 하지만 문장이 실행된 이후에 i값 증가

++연산자를 변수명 앞에 붙여 사용하면 i값이 먼저 증가된 후 해당코드 실행

 

5-2. 불

boolean

→ 참(true), 거짓(false) 값을 가짐

→ 불 연산의 결괏값 대입 가능 (불 연산 : 참 또는 거짓을 판단하는 연산)

→ if문 같은 조건문에도 사용

 

5-3. 문자

char

char a1 = 'a'; //문잣값 앞뒤를 ''로 감싸 줘야함
char a2 = 97; //아스키코드로 표현
char a3 = '\u0061' //유니코드로 표현

System.out.println(a1);  // a 출력
System.out.println(a2);  // a 출력
System.out.println(a3);  // a 출력

 

5-4. 문자열

String

→ 문자열 : 문자로 구성된 문장

String a = "Happy Java"; // 문자열은 ""로 감싸야함

 

new 키워드

→ 객체 만들 때 사용

 

String a = "Happy Java";
String b = new String("Happy Java");

변수 a,b 는 같은 문자열 값 but 완전히 동일 x

 

첫 번째 코드(literal 표기방식)

→ 고정된 값을 그대로 대입

 

두 번째 코드

→ 항상 새로운 String 객체를 만듬 

 

 

 

원시 자료형

→ int, long, double, float, boolean, char 자료형 = 원시자료형(primitive)

→ new 키워드로 값 생성 x 

→ 리터럴 표기 방식으로만 값 세팅

String 리터럴 표기 방식 가능 but 원시자료형 x (특별대우임 부럽다)

 

문자열 내장 메서드

→ 문자열 객체에 속한 함수

→ 문자열 합치기, 분할, 대소문자 변환 등 문자열을 다양하게 활용할 수 있도록 도와줌

equals 문자열 2개가 같은지 비교, 결과값 리턴
indexOf 문자열에서 특정 문자열이 시작되는 위치(인덱스값) 리턴
contains 문자열에서 특정 문자열이 포함되어 있는지 여부 리턴
charAt 문자열에서 특정 위치의 문자 리턴
replaceAll 특정 문자열을 다른 문자열로 바꿀 때 사용
substring 문자열에서 특정 문자열 뽑아낼 때 사용
toUpperCase 모두 대문자로 변경
split 문자열을 특정한 구분자로 나누어 문자열 배열로 리턴 

 

 

문자열 포매팅(formatting)

→ 문자열 안의 특정한 값을 바꿀 수 있게 해주는 것

→ 문자열 안에 어떤 값을 삽입하는 방법

Stirng.format 메서드 사용

 

ex) 숫자 바로 대입하기

System.out.println(String.format("I eat %d orange.", 100)); // "I eat 100 orange." 출력

→ 문자열 안에서 숫자를 넣고 싶은 자리에 %d 입력, 삽입할 숫자를 두 번째 파라미터로 전달

 

파라미터 : 메소드 선언 시 사용되는 변수

 

문자열 포맷 코드 종류

코드 설명
%s 문자열(String)
%c 문자 1개(character)
%d 정수(Integer)
%F 부동소수(floating-point)
%o 8진수
%x 16진수
%% Literal %(문자 % 자체)

 

문자열 포맷 코드 응용하기

1. 정렬과 공백 표현

System.out.println(String.format("%10s";,"hi"));
//전체 길이가 10인 문자열 공간에서 대입되는 값을 가장 오른쪽으로 정렬하고 나머지는 공백
//"        hi" 출력

System.out.println(String.format("%-10sjane.","hi"));
//"hi        jane." 출력

 

2. 소수점 표현

%.4f

→ 소수점 넷째 자리까지만 나타내고 싶을 때 사용

→ . = 소수점, 4 = 소수점 뒤에 이어질 숫자의 개수

System.out.println(String.format("%10.4f",3.42134234)); //'    3.4213' 출력

 

System.out.printf

System.out.println(String.format("I eat %d oranges.",100)); //String.format : 문자열 리턴
System.out.printf("I eat %d oranges."100); //String.out.printf : 문자열 출력

 

 

5-5. StringBuffer

→ 문자열 추가, 변경 할 때 사용하는 자료형

→ StringBuffer의 메서드 (append, insert, substring)

 

append

→ 문자열 추가

StringBuffer sb = new StringBuffer(); // StringBuffer 객체 sb 생성
sb.append("hello");
sb.append(" ");
sb.append("java");
String result = sb.toString(); //toString 은 객체가 가지고 있는 정보나 값을 문자열로 만들어 리턴
System.out.println(result); // "hello java" 출력
String result = "";
result += "hello";
result += " ";
result += "java";
System.out.println(result); //"hello java" 출력

 

첫 번째 : StringBuffer 객체를 한 번만 생성

두 번째 : String 자료형에 + 연산이 있을 때마다 새로운 String 객체 생성 (총 4개의 String 자료형 객체)

→ 결과는 같지만 내부적으로 객체 생성, 메모리 사용하는 과정 다름

 

String 자료형은 값이 한 번 생성되면 변경 X

StringBuffer 자료형은 값 변경 O

→ 상황에 맞게 알아서 쓰셈!

 

insert

→ 특정 위치에 원하는 문자열 삽입

sustring

→ 특정 문자열 뽑아냄

 

5-6. 배열

→ 자료형의 집합

 

(1) 배열의 길이 설정

String[] animals = new String[3]; //배열의 길이 먼저 설정, 배열 변수 생성, 값 나중에 대입
animals[0] = "토끼";
animals[1] = "다람쥐";
animals[2] = "두꺼비";

 

(2) 배열값에 접근

String[] animals = {"토끼","다람쥐","두꺼비"};
System.out.println(animals[2]);  //두꺼비 출력 인덱스 이용!

 

(3) 배열 길이 구하기

→ length 사용

String[] animals = {"토끼","다람쥐","두꺼비"}
for (int i = 0; i < weeks.lengthl i++) {
	System.out.println(weeks[i]);
}
/*출력
토끼
다람쥐
두꺼비
*/

 

 

5-7. 리스트

→ 배열과 비슷하지만 배열은 크기 정해짐, 리스트는 크기 안 정해짐

→ 따라서 계속 변하는 상황이라면 리스트 사용

 

ArrayList

(1) add

→ 요솟값 추가

import java.util.ArrayList;

public class Add {
	public static void main(String[] args) {
    	ArrayList pitches = new ArrayList();
        pitches.add("138");
        pitches.add("127");
	}
}

 

pitches.add(0,"133"); //첫번째 위치에 133 삽입




(2) get

→ 특정 인덱스 값 추출

(3) size

→ 요소의 개수 리턴

(4) contains

→ 리스트 안에 해당 항목 있는지 판별, 결과를 boolean 리턴

(5) remove

remove (객체)
remove (인덱스)
remove(객체)

→ 리스트에서 객체에 해당하는 항목 삭제, true 또는 false 리턴

remove(인덱스)

→ 인덱스에 해당하는 항목 삭제, 항목 리턴





ArrayList 만들기

1. add 메서드 사용

2. asList 메서드 사용 (이미 존재하는 문자열 배열로 만듬)

3. String 배열 대신 String 자료형을 여러 개 전달하여 생성



String.join

→ 리스트의 각 요소에 구분자를 넣음, 하나의 문자열로 만듬

→ 문자열 배열에도 사용 가능



리스트 정렬

→ sort 메서드 사용

→ 정렬 기준을 파라미터로 전달 (정렬 기준에는 오름차순, 내림차순 존재) 

오름차순(순방향)정렬 - Comparator.naturalOrder()
내림차순(역방향)정렬 - Comparator.reverseOrder()


5-8. 맵
→ 대응 관계를 쉽게 표현할 수 있게 해주는 자료형 ex) '이름 = 이서영', '생일 = 12월 9일'

→ 키(key)와 값(balue)을 한 쌍으로 갖는 자료형

키(key) 값(value)
people 사람
orange 오렌지


→ 리스트나 배열처럼 순차적으로 요솟값 x 키를 이용해 값을 얻음

→ 마치 사전과 같다. orange라는 단어의 뜻을 찾을 때 모두 읽지 않고 단어가 있는 곳을 찾아 확인하는 것처럼





HashMap


(1) put

→ key, value 추가

import java.util.HashMap;

public class Sample {
    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<>();
        map.put("people", "사람");
        map.put("orange", "오렌지");
    }
}
→ key, value : String 자료형



(2) get

→ key에 해당하는 value를 얻을 때 사용

System.out.println(map.get("orange")); // "오렌지" 출력


(3) containsKey

→ 맵에 해당 key가 있는지 참, 거짓으로 리턴

(4) remove

→ 맵의 항목을 삭제, key항목 삭제 후 value 리턴

(5) size

→ 맵 요소의 개수 리턴

(6) keySet

→ 맵의 모든 key를 모아서 리턴



 

(리스트부터 여기까지 쓰다가 날라갔어요..다행히 미리 날라갈 거 같아서 메모장에 복붙하고 한거라 정리는..)

 


5-9. 집합

집합 자료형

→ 중복 허용 x 

→ 순서 x

→ 교집합, 합집합, 차집합을 구할 때 유용

 

교집합 구하기 → retainAll 메서드

합집합 구하기 → addAll 메서드

차집합 구하기 → removeAll 메서드 

 

집합 자료형과 관련된 메서드

add → 집합 자료형에 값 추가

addAll   값 한꺼번에 여러 개 추가

remove → 특정 값 제거 

 

 

5-10. 상수집합

enum 자료형 → 서로 연관 있는 여러 개의 상수집합 정의

ex)

enum PastaType {
    Tomato,
    Cream,
    Oil
};

 

 

→ 매직 넘버를 사용할 때보다 코드 명확

→ 오류 막기 가능

 

 

5-11. 형 변환, final

 

형 변환

→ 자료형을 다른 자료형으로 변환 ex) "123" 과 같은 문자열을 123 같은 숫자형으로

 

 

문자열 -> 정수

Integer 클래스 사용

public class Sample {
    public static void main(String[] args) {
        String num = "123";
        int n = Integer.parseInt(num);
        System.out.println(n);  // 123 출력
    }
}

 

정수 -> 문자열

public class Sample {
    public static void main(String[] args) {
        int n = 123;
        String num = "" + n;
        System.out.println(num);  // 123 출력
    }
}

 

소수점 포함

→ Double.parseDouble / Float.parseFloat 사용

 

 

final

→ 값을 한 번 설정하면 그 값을 다시 설정할 수 없다.

→ 상수가 됨! 

 

 

Quiz

1. int 자료형의 크기

(c) 32비트

 

2. Java에서 소수점이 있느 실수형 데이터를 저장하기 위해 사용하는 자료형?

(c) float

 

3. double 자료형과 float 자료형의 차이점?

(b)

 

4. 다음 중 boolean 자료형이 가질 수 있는 값은?

(a)

 

5. 다음 중 boolean 값을 반환하는 메서드?

(a) isEmpth()

 

6. boolean 표현식을 적절히 사용하는 경우는?

(b)

 

7. 다음 중 문자열을 상수 풀(String Pool)에 저장하는 방법은?

(b)

 

8. 다음 중 문자열 길이를 반환하느 메서드?

(a) length()

 

9. 다음 코드의 출력 결과?

(b)

 

10. Java에서 배열의 길이를 얻기 위해 사용하는 속성은?

(c)

 

11. 다음 중 Java에서 다차원 배열을 선언하는 올바른 문법?

(b)

 

12. 배열에 초기값 없이 선언된 int배열의 기본값?

(a)

 

13. 배열의 인덱스는 몇부터 시작?

(a) 0

 

14. 다음 코드의 출력 결과는?

(c) 3

 

15. Java에서 List 인터페이스를 구현한 클래스가 아닌 것은?

(c) HashSet

 

16. 다음 중 ArrayList의 기본적인 특징은?(c) 임의 접근이 가능하다. 

 

17. List 에서 요소를 추가할 때 사용하는 메서드?(c) add()

 

18. 다음 코드의 출력 결과(b)

 

19. List 의 요소를 반복하기 위해 사용할 수 있는 방법?(d)

 

서술형 문제1. Java에서 기본 자료형과 참조 자료형의 차이점에 대해 설명

→ 기본 자료형은 new 키워드로 값 생성할 수 없다.

 

2. 숫자형 자료형 간의 형 변환이 발생할 때의 주의사항을 설명

→ 정수를 실수로 바꿀 때에는 캐스팅이 필요없지만 실수를 정수로 바꿀 때에는 반드시 정수형으로 캐스팅 해줘야한다.

 

3. Java에서 String 객체를 생성하는 두 가지 방법의 차이점을 설명하시오.

→ 리터럴 방식은 고정된 값을 그대로 대입하는 방법이지만 new키워드는 새로운 String 객체를 만든다.

 

4. Java에서 문자열을 연결하는 방법을 설명하고 어떤 방법이 성능 면에서 더 유리한 지 서술하시오.

→ String은 += 으로 문자열을 연결하고 StringBuilder append()메소드를 사용하여 연결한다

StringBuilder이 성능면에서 더 유리하다. String은 +연산이 있을 때마다 객체를 생성하기 때문이다.

 

5. Java에서 문자열 비교 시 == 연산자와 equals() 메서드의 차이점을 설명

equals 메서드는 문자열 2개가 같은지를 비교하여 결과값을 리턴하는 것이고, ==은 2개의 자료형이 같은 객체인지를 판별 할 때 사용하는 연산자이다. 

 

6. 배열 선언 방법 2가지 작성1. int 타입의 배열 선언2. 배열 길이 먼저 설정 후 배열 변수 생성한 뒤 값 나중에 대입 

 

7. 배열의 크기를 변경할 수 없다는 특성을 설명하고, 이 문제를 해결하기 위해 사용할 수 있는 대안에 대해 설명하시오.배열은 크기가 정해져 있어 변경할 수 없지만 리스트는 변할 수 있으니 리스트를 사용하면 된다.

 

 

코딩테스트

https://school.programmers.co.kr/learn/courses/30/lessons/120807

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/12916

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

으악어려워!

반응형