본문 바로가기

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

[2024-2 Java 스터디] 이민형 #1주차 (1~3장)

반응형

자바를 "자바라" (Java "java")

 

1.  Java는 뭘까요?


자바를 정의한다면

 

Java는 우리나라에서 쓰는 프로그래밍 언어 중 사용 빈도가 매우 높은 객체 지향 프로그래밍 언어

객체 지향 프로그래밍 언어 : 객체를 중심으로 프로그래밍 하는 언어
객체 : 다음에 알아보도록 하자?

 

 

 

 

2.  Java랑 인사하기


Java 코드의 구조

 

public class 클래스명 {

	/ 메서드 블록 1 /
	[public|private|protected] [static] (리턴자료형|void) 메서드명1(입력자료형 매개변수, ...) {
		명령문(statement);
		...
	}

	/ 메서드 블록 2 /
	[public|private|protected] [static] (리턴자료형|void) 메서드명2(입력자료형 매개변수, ...) {
		명령문(statement);
		...
	}

	...
}

 

여기 보이는 게 Java 코드의 구조이다. 이 전체 코드의 블록을 클래스라고 한다.

클래스명은 소스 파일의 이름과 똑같이 사용할 것!

 

클래스 블록 안의 메서드 블록을 볼 수 있을 것이다.

이처럼 클래스 안에는 여러개의 메서드 블록이 들어 갈 수 있다.

메서드명은 자유롭게 지을 수 있다

 

메서드 블록 안에는 여러개의 명령문이 있다.

명령문은 반드시 세미콜론(;)을 붙여 멸령이 끝났다는 것을 표시한다

 

 

Java의 변수 그리고 자료형

 

 

변수는 말 그대로 값을 대입하여 넣을 수 있는 변수이다...

그럼 그 변수가 숫자인지 문자인지 무엇인지 형태가 정해져야하는데 그 형태를 우리는 자료형이라고 한다.

변수명은 숫자로 시작하면 안도ㅑ고
_ 그리고 $를 제외한 특수문자도 안돼고
자바의 키워드도 마찬가지로 사용할 수 없어
abstract  continue  for         new        switch
assert    default   goto        package    synchronized
boolean   do        if          private    this
break     double    implements  protected  throw
byte      else      import      public     throws
case      enum      instanceof  return     transient
catch     extends   int         short      try
char      final     interface   static     void
class     finally   long        strictfp   volatile
const     float     native      super      while​
이건 자바의 키워드임

 

변수의 형태를 뜻하는 자료형의 종류에는 대표적으로 이들이 있다.

int
long
double
boolean
char
String
StringBuffer
List
Map
Set

 

근데 여기서 엄청난 사실은 사용자가 직접 자료형을 만들 수도 있다.

다음에 알아보도록 하자 지금은 더 중요한 게 많다

 

 

 

Java의 명명 규칙

자바라는 언어를 사용하면서 클래스, 메서드, 변수 등 이름을 지을 때  우리는 알아야 할 규칙이 있다.

왜? 코드는 너만 볼게 아니니깐, 너가 만든 언어가 아니니깐!!

 

자바의 클래스를 만드려면 이름을 지어야하는데 규칙이 존재한다.

클래스명은 명사로 한다.
클래스명은 대문자로 시작한다.
여러 개의 단어를 조합하여 만들 경우 각 단어의 첫 번째 글자는 대문자이어야 한다.

 

메서드도 규칙이 존재한다. 뭐 이런 규칙은 가독성 때문이라고 생각하면 된다.

메서드명은 동사로 한다.
매서드명은 소문자로 시작한다.
여러 개의 단어를 조합하여 만들 경우 맨 첫 글자를 제외한 나머지 단어의 첫 글자는 대문자를 써서 구분한다.

 

그리고 변수명은 누가봐도 이 변수는 무엇을 위한 변수인지 알 수 있도록 하는게 좋다.

예를 들어 치킨 개수를 세기 위한 변수이면 변수 이름을 chickenCount 이런 식

 

 

 

3. Java의  자료형을 알아보자


 

숫자

 

자바에서 정수를 표현 할 수 있는 자료형은 int와 long이 있다.

다만 범위에 차이가 존재한다.

int -2147483648 ~ 2147483647
long -9223372036854775808 ~ 9223372036854775807

 

왜 이런 범위가 존재할까?
만약 범위가 없이 하나의 숫자 자료형 밖에 없다면 비효율 적인 메모리를 사용하게 될 수 있다는 것

 

 

자바에서 실수를 표현 할 수 있는 자료형은 float와 double이 있다.

몰론 범위도 있음 ㅋㅋ

 

float 보다는 double의 범위가 압도적으로 큼

 

8진수와 6진수는 int 자료형을 사용하긴헌다.

0으로 시작하면 8진수이고 0x로 시작하면 16진수이다.

int octal = 023;    //19
int hex = 0xC3;     //195

 

자바에서는 ++, -- 이 증감 연산자들을 이용하여 값을 증감시킬 수 있다.

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

System.out.println(i);  // 1 출력
System.out.println(j);  // 9 출력

 

++는 값을 1만큼 증가 시키며 --는 1만큼 감소 시킨다.

 

 

근데 증감연산자의 위치는 정말 정말 중요하다

 

int i = 0;
System.out.println(i++);  // 0 출력
System.out.println(i);  // 1 출력

 

아니 왜 i++ 해서 1이 출력돼야 할 것 같은데 왜 0이 나올까????????

 

다시 말하자면 증감 연산자의 위치는 정말 중요하다

 

i++ 처럼 증감연산자가 변수 뒤에 붙으면 그 명령이 실행되는 동안에는 변수 값이 바뀌지 않는다.

명령이 실행된 이후에나 값이 변경된 것을 확인 할 수 있다.

int i = 0;
System.out.println(++i);  // 1 출
System.out.println(i);  // 1 출

이런 식으로 연산자의 위치를 바꾸어 주면 변수의 값이 먼저 증가하고 명령이 실행된다.

 

 

 

활활 타는 불 당연히 절대 아니다.

 

true 또는 False의 값을 갖는 자료형을 불(boolean) 자료형이라고 한다.

 

 

int base = 70;
int weight = 100;
boolean isTall = weight > base;

if (isTall) {
    System.out.println("돼지입니다.");
}

 

다음처럼 조건문의 판단 기준으로 사용할 수도 있다.

몸무게 관리를 해보도록 하자

 

 

 

문자

 

 

문자 자료형은 char을 이용한다.

char tea = 'a';
이것도 마시는 차 아니다.

 

 

 

문자열

 

 

자바에서는 String이 문자열을 나타내는 자료형이다.

String a = "americano";  // 쌍따옴표("")
String b = "a";
String c = "123";
String a = new String("americano");
String b = new String("a");
String c = new String("123");

 

위와 아래의 차이를 알겠는가?

new 키워드는 객체를 만든다.

객체 : 다음에 알아보도록 하자?

 

 

문자열 전에 한번 얘기 했던 int, float, boolean....등등을 우리는 원시 자료형이라고 한다.

이런 자료형들은 문자열 String처럼 new키워드로 값을 생성하지 못한다.

리터럴 방식으로만 가능하다.

참고로 위에 있는 가독성 좋은 저 방식이 리터럴 방식임

 

 

==연산자와 equals()메서드의 차이를 아는가?

아는가?

으이?!

 

==연산자는 비교하는 두 자료형이 같은 객체인가를 판별한다.

equals() 메서드는 두 자료형의 값이 동일한가를 비교하는 메서드인 것이다.

String a = "hungry";
String b = new String("hungry");
System.out.println(a.equals(b));  // true
System.out.println(a == b);  // false
객체 : 다음에 알아보도록 하자?

 

 

문자열 포매팅이라고 있다.

문자열 포매팅이란 문자열 안에 어떤 값을 삽입하는 것인데.. 

 

문자열 포매팅은 String.format 매서드를 이용한다.

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

System.out.println(String.format("I eat %s dishes.", "five"));  // "I eat five dishes." 출력

 

이렇게 삽입하는 것이다. 매우 간단하다.

숫자일 때는 %d를 문자열일 때는 %s를 사용한다. 문자열 포맷 코드라고 한다.
문자열 포맷 코드는 이것 말고도 종류가 많다.
사실 %s는 마스터 카드이다. 문자열 뿐만이 아닌 다른 자료형도 가능하다. 

 

 

 

 

StringBuffer

 

StringBuffer는 문자열을 추가하거나 문자열을 변경할 때 사용한다.

 

StringBuffer ex = new StringBuffer();  

ex.append("hello");
ex.append(" ");
ex.append("do you know me?");

String result = ex.toString();
System.out.println(result);  // "hello do you know me?" 출력

 

 

근데 여기서 의문이 생긴다면 당신은 내꺼.

String 자료형도 어차피 문자열인데 뭐 추가할 수 있지 않냐라고 할 수 있다.

 

StringBuffer를 사용하게 된다면 객체를 한 번만 생성하게 된다.

근데 String으로 하게 된다면 문자열을 추가할 때마다 새로운 객체가 생성 되게 된다.

String자료형은 한 번 정해지면 변경할 수 없다.
변경되는 것 처럼 보이니? 넌 속은 것이야

 

 

 

배열

 

배열, array라고 한다.

int[] fingers = {1, 2, 3, 4, 5};
String[] week = {"월", "화", "수", "목", "금", "토", "일"};

 

이런 식으로 자료형의 종류 중 하나가 아니라 자료형의 집합을 뜻한다.

 

배열을 사용하게 되면 for문을 정말 많이 사용하게 될 것이다.

배열길이를 사용하기 위해서는 length를 사용도록 한다.

int[] fingers = {1, 2, 3, 4, 5};
for (int i = 0; i < fingers.length; i++) {
    System.out.println(fingers[i]);
}

ㅕ이렇게 작성하게 되면 

예상과 같이 숫자가 차례대로 출력된다.

 

 

List

 

 

배열을 배우면서 리스트와 비슷하지 않냐? 라고 생각이 들어야한다.

리스트는 크기가 변한다. 배열은 그렇지 않다. 배열의 크기를 넘는 개수의 값을 담을 수는 없다.

 

ArrayList에 대해서 알아보자.

리스트 자료형은 이것 말고도 더 존재하긴 한다.
ArrayList를 사용하려면 import java.util.ArrayList  이러한 import 문을 작성해여함.

 

ArrayList는 무엇일까? 리스트이다.

 

리스트는 요소를 추가할 수 있어야한다.

그럴 떄 우리는 add 메서드를 이용한다.

 

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

 

이처럼 위치 지정도 가능하다.

 

출력할 때는 get 메서드를 사용한다.
요소의 개수를 알고 싶다면 size 메서드를 사용한다.
contains 메서드를 사용하면 리스트 안에 찾는 요소가 있는지 확인할 수 있다.

 

 

remove 메서드는 요소를 지우는 게 가능하다.

근데 방식이 2가지다.

System.out.println(fingers.remove("1"));  // 1를 리스트에서 삭제하고, true를 리턴

System.out.println(fingers.remove(0));  // 1을 삭제한 뒤 1을 리턴

만약 fingers 라는 리스트에 1이란 요소가 딱 하나 있다고 했을 때 

이런 2가지 방식으로 지우고 출력할 수 있다.

 

 

제네락스는 우리가 ArrayList를 사용할 때 자료형을 좀 더 명확하게 체크할 수 있게 도와준다.

어떻게...?

ArrayList fingers = new ArrayList(); // 1번

ArrayList<String> fingers = new ArrayList<>(); // 2번

둘다 마찬가지로 ArrayList를 선언하는 코드이다.

2번 코드처럼 제네릭스로 자료형을 선언하게 되면 그 ArrayList 안에는 그 자료형만 들어갈 수 있다.

자료형 변환과 관련된 불필요한 코딩을 줄일 수 있다는 것이다.

 

 

어렵다......

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1주차 QUIZ

 

 

문제1 : int 자료형의 크기는?

 

답: 32비트

 

왜 why?

내가 필요한 범위 이상으로 돌리게 되면 시간적으로 손해기 때문

그렇기에 정수형의 범위를 정해 놓는다

 

 

 

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

 

답 : float

 

 

 

문제3 : double 자료형과 float 자료형의 차이점은 무엇인가?

 

답 : double은 64비트 float는 32비트이다

 

 

 

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

 

답 : true와 false

 

 

 

문제5 : 다음 중 boolean 값을 반환하는 메서드는?

 

답 : isEmpty()

 

isEmpty() 메서드는 문자열이 비어있으면 true를 그게 아니라면 false를 반환함

 

 

 

문제6 : 다음 중 boolean 표현식을 적절히 사용하는 경우는?

 

 

답 : boolean y = true;

 

boolean 자료형에는 true 혹은 false만 들어갈 수 있으며

“true” <— 이건 문자임;;

 

 

 

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

 

답 : new String("example")

 

 

 

문제8 : 다음 중 문자열 길이를 반환하는 메서드는?

 

답 : length()

 

size() 메소드는 리스트나 집합 등의 요소 개수를 반환함

 

 

 

문제8 : 다음 코드의 출력 결과는 무엇인가?

 

String s1 = "Java";

String s2 = new String("Java");

System.out.println(s1 == s2);

 

답 : false

 

 

 

문제 9 : Java에서 배열의 길이를 얻기 위해 사용하는 속성은?

 

답 : length

 

 

 

문제 10 : 다음 중 Java에서 다차원 배열을 선언하는 올바른 문법은?

 

답 : int[][] arr = new int[2][2];

 

 

 

문제 11 :  배열에 초기값 없이 선언된 int 배열의 기본값은?

 

답 : null

 

 

 

문제 12 : 배열의 인덱스는 몇부터 시작하는가?

 

답 : 0

 

 

 

문제 13 : 다음 코드의 출력 결과는?

int[] arr = {1, 2, 3, 4}; 

System.out.println(arr[2]);

 

답 : 3

 

 

 

문제 14 : Java에서 List 인터페이스를 구현한 클래스가 아닌 것은?

 

답 : HashSet

 

HashSet은 순서가 중요하지 않고 중복된 요소를 허용함 

 

 

 

 

문제 15 : 다음 중 ArrayList의 기본적인 특징은 무엇인가?

 

답 : 임의 접근이 가능하다.

 

 

 

 

문제 16 : List에서 요소를 추가할 때 사용하는 메서드는?

 

답: add()

 

 

 

 

문제 17 : 다음 코드의 출력 결과는 무엇인가?

List<String> list = new ArrayList<>(); 

list.add("Java"); list.add("Python"); 

System.out.println(list.get(1));

 

답: python

 

 

 

 

문제 18 : List의 요소를 반복하기 위해 사용할 수 있는 방법인 것은?

 

답 : 모두 맞음

 

 

 

    1.Java에서 기본 자료형(primitive types)과 참조 자료형(reference types)의 차이점에 대해 설명하시오.

 

    -String, Array, Map, Set과 같은 참조 자료형은 Int, float, char, boolean과 같은 기본자료형과는 달리 메서드를 가질 수 있다.

 

  1. 숫자형 자료형 간의 형 변환(예: int에서 double로 변환)이 발생할 때의 주의사항을 설명하시오.

 

     -int는 정수를 표현하는 자료형이고 double은 실수를 표현하는 자료형이기 때문에 double에서 int로 변환할 때 데이터 손실이 발생할 수 있다.

 

 

   2.Java에서 String 객체를 생성하는 두 가지 방법(리터럴 방식과 new 키워드 사용)의 차이점을 설명하시오.

 

     -리터럴 방식은 값을 그대로 대입하는 것이고 new 키워드를 사용하게되면 새로운 객체를 만들어 낸다. 리터럴 방식은 객체를 재활용하게 된다.

 

 

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

 

    -String 객체는 한번 생성되면 할당된 메모리 공간이 변하지 않는다.

예를 들어 어떠한 String 문자열에 다른 문자열을 붙여도 기존 문자열에 새로운 문자열을 붙이는 게 아니라 새로운 객체를 만든다는 것이다.

 

StringBuilder는 문자열 연산으로 기존의 공간이 부족해질 경우 버퍼 크기를 늘리며 유연하게 작동한다.

 

그래서 보다 복잡한 문자열 연산을 다룰 때 성능적인 면에서 Stringbuilder가 더 유리하다. 

 

 

 

 

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

 

     -== 연산자는 두 문자열을 주소 값을 비교한다. 이 말은 그 값이 같아도 == 연산자에게는 같은 것이 아닐 수 있다는 얘기이다!! 그에 반해 equals() 메서드는 직관적을 그 값을 비교한다.

 

 

 

   5.배열 선언 방법 2가지를 작성하시오.

 

1.int[] arr;  2. int arr[]; 

 

 

 

   6.배열의 크기를 변경할 수 없다는 특성을 설명하고, 이 문제를 해결하기 위해 사용할 수 있는 대안에 대해 설명하시오.

 

배열의 크기를 변경한 메모리의 위치를 매번 확인할 수 없기 때문이다. 이를 해결하기 위해서는 우리 ArrayList를 사용하면 된다!

 

 

 

 

반응형