본문 바로가기

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

[2024-2 Java 스터디] 강보경 #1주차

반응형

자바 파일과 컴파일

자바 파일 작성 (xx.java) -> .java 파일을 .class로 컴파일 -> .class 실행 -> 자바 프로그램 실행
=> 클래스 파일은 어떤 운영체제에서도 사용할 수 있음 (장점!)


main 메서드

public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("Hello, World!");
	}
}

public: 접근 제어자, 누구나 이 메서드에 접근 가능 (접근 제어자: public, private, protected, -)
static: 인스턴스 생성하지 않아도 실행 가능 (static, -)
void: 리턴값 없음 (void, 리턴 자료형 - 메서드가 실행된 후 리턴되는 값의 자료형)
String[]: 문자열 나타내는 자료형
args: String[]의 변수명, args말고 달라질 수 있음
System.out.println: 출력 (println: 한 줄 띄우고 출력)
=> 프로그램 실행하려면 반드시 필요!


자바 코드

public class HelloWorld {     //클래스 블록
		public static void main(String[] args) {     //메서드 블록
			System.out.println("Hello, World!");     //명령문
		}
	}
  • 클래스 블록: 클래스명 HelloWorld, class는 클래스 블록을 만드는 키워드
    클래스명: 대문자로 시작하는 명사, 파스칼케이스 따름(여러 단어의 조합일 때 각 단어의 첫글자는 대문자로)
  • 메서드 블록: 메서드명 main, 클래스 블록 안에 여러 메서드 블록 있을 수 있음
    메서드명: 소문자로 시작하는 동사, 카멜케이스 따름(여러 단어의 조합일 때 두번째 단어부터 첫글자를 대문자로)
  • 명령문: 일 시키는 문장, ; 꼭 붙여야함! 명령문도 여러 개 있을 수 있음

주석

블록 주석: /* ~~~ */, 블록 단위로 설명할 때 사용
라인 주석: //, 특정 코드 한 줄 설명할 때 사용
주의: 적절한 사용, 내용 업데이트, 임시 백업


변수

값을 대입하여 사용

int a; //a가 변수, int는 자료형
a=1; // 변수 a에 1이라는 값 대입
int a = 1; //이렇게 써도 됨!


변수명: 숫자로 시작x, _와 $ 이외의 특수문자 사용X (시작 문자로 사용은 지양), 자바 키워드 사용x 


자료형

  • 숫자 자료형
    • 정수 (범위의 차이)
      int: 기본값
      long: 끝에 L을 꼭 붙여줘야함!
    • 실수 (범위의 차이)
      float: 끝에 F를 꼭 붙여줘야함!
      double: 기본값
    • 8진수 & 16지수
      int자료형 사용
      8진수: 0으로 시작 ex) int octal = 023; (자료형 int 변수 octal)
      16진수: 0x로 시작 ex) int hex = 0xC3; (자료형 int 변수 hex)
    • 숫자 연산
      +(더하기), -(빼기), *(곱하기), /(나누기), %(나머지)
    • 증감 연산
      ++(1만큼 증가), --(1만큼 감소)
      연산자 위치:
      int i = 0;
      System.out.println(i++);  => 0
      System.out.println(i);    => 1
      증감 연산자가 변수명 뒤에 붙으면 실행 순간에는 값이 변경되지 않고 실행된 이후에 변경됨 => 변수 앞에 붙이면 원하는 대로 됨! (++i)
  • 불 (boolean)
    • 참 또는 거짓을 판단하는 연산
    • 조건문
int base = 180;
int height = 185;
boolean isTall = height > base;

if (isTall) {
    System.out.println("키가 큽니다.");
}  // "키가 큽니다." 출력
int i = 3;
boolean isOdd = i % 2 == 1;
System.out.println(isOdd);  // true 출력

 

  • 문자 (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 출력

 

  • 문자열 (String)
    • new 키워드: 객체 만들 때 사용
    • 문자열 내장 메서드: 문자열 객체에 속한 함수
      • equals: 문자열 2개가 같은지 비교하여 결과 리턴
        • equals != 연산자 '==' (equals는 값이 같은지 비교, ==는 객체가 같은지 비교)
      • indexOf: 특정 문자열이 시작되는 위치(인덱스값) 리턴
      • contains: 특정 문자열이 포함되어 있는지 여부 리턴
      • charAt: 특정 위치의 문자 리턴
      • replaceAll: 특정 문자열을 다른 문자열로 바꿀 때 사용
      • substring: 특정 문자열 뽑아낼 때 사용
      • toUpperCase: 문자열 모두 대문자로 변경
      • split: 특정한 구분자로 나누어 문자열 배열로 리턴
    • 문자열 포매팅 (String.format) : 문자열 안의 특정한 값 변경
      • 숫자 대입: %d
      • 문자 대입: %s
String a = "happy"; // 리터럴 표기 방식, 고정된 값을 그대로 대입 (추천)
String a = new String("happy"); // new 키워드

// equals
String a = "hello";
String b = "java";
String c = "hello";
System.out.println(a.equals(b)); // false 출력
System.out.println(a.equals(c)); // true 출력

String a = "hello";
String b = new String("hello");
System.out.println(a.equals(b));  // true
System.out.println(a == b);  // false, equals랑 다름

//indexOf
String a = "Hello Java";
System.out.println(a.indexOf("Java"));  // 6 출력

// contains
String a = "Hello Java";
System.out.println(a.contains("Java"));  // true 출력

// charAt
String a = "Hello Java";
System.out.println(a.charAt(6));  // "J" 출력

// replaceAll
String a = "Hello Java";
System.out.println(a.replaceAll("Java", "World"));  // Hello World 출력

// substring
String a = "Hello Java";
System.out.println(a.substring(0, 4));  // Hell 출력

// toUpperCase
String a = "Hello Java";
System.out.println(a.toUpperCase());  // HELLO JAVA 출력

// split
String a = "a:b:c:d";
String[] result = a.split(":");  // result는 {"a", "b", "c", "d"}


// 문자열 포매팅
System.out.println(String.format("I eat %d apples.", 3));  // "I eat 3 apples." 출력
System.out.println(String.format("I eat %s apples.", "five"));  // "I eat five apples." 출력

System.out.println(String.format("%10s", "hi"));  // "        hi" 출력, 오른쪽 정렬 공백8개, 전체길이 10개
System.out.println(String.format("%-10sjane.", "hi"));  // "hi        jane." 출력, 왼쪽 정렬 전체길이 10개, 공백 8개

System.out.printf("I eat %d apples.", 3);  // "I eat 3 apples." 출력, String.format 없어도 같은 문자열 출력

 

  • StringBuffer
    • 문자열 추가, 변경에 사용
    • String 자료형은 값을 변경할 수 없고 메서드 수행 시 또 다른 String 객체를 생성하지만 StringBuffer 자료형은 생성된 값을 수정할 수 있음
    • 동기화를 고려해야하면 StringBuilder 추천! StringBuffer와 비슷한 자료형이고 사용법도 같음
    • append: 문자열 추가
    • insert: 특정 위치에 원하는 문자열 삽입
    • substring: 시작위치에서 끝위치까지의 문자열 뽑아냄
// append
StringBuffer sb = new StringBuffer();  // StringBuffer 객체 sb 생성
sb.append("hello");
sb.append(" ");
sb.append("jump to java");
String result = sb.toString();
System.out.println(result);  // "hello jump to java" 출력, 객체 1개

String result = "";
result += "hello";
result += " ";
result += "jump to java";
System.out.println(result);  // "hello jump to java" 출력, 객체 4개

// insert
StringBuffer sb = new StringBuffer();
sb.append("jump to java");
sb.insert(0, "hello ");
System.out.println(sb.toString());  // "hello jump to java" 출력

// substring
StringBuffer sb = new StringBuffer();
sb.append("Hello jump to java");
System.out.println(sb.substring(0, 4));  // "Hell" 출력

 

  • 배열 (자료형[])
    • 자료형의 집합
    • 배열의 길이 설정: 배열의 길이 먼저 설정 -> 배열 변수 생성 -> 이후 값 대입
    • 배열값에 접근: 인덱스 이용 (인덱스는 0부터 시작!)
    • 배열의 길이 구하기: for문과 함께 사용, 배열 길이는 length 사용
    • 배열 오류: 배열 길익 7일 때 8번째 값 얻으려고 하면 발생
    •  
int[] odds = {1, 3,5, 7, 9}; // int 배열
String[] weeks + {"월","화", "수", "목", "금", "토", "일"}; // String 배열

// 배열의 길이 설정
String[] weeks = new String[7];
weeks[0] = "월";
weeks[1] = "화";
weeks[2] = "수";
weeks[3] = "목";
weeks[4] = "금";
weeks[5] = "토";
weeks[6] = "일";

// 배열값에 접근
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
System.out.println(weeks[3]);  // "목" 출력

// 배열의 길이 구하기
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
for (int i = 0; i < weeks.length; i++) {
    System.out.println(weeks[i]);
}	/* "월
            화
            수
            목
            금
            토
            일" 출력 */

// 배열 오류
System.out.println(weeks[7]);  // 여덟 번째 배열값이 없으므로 ArrayIndexOutOfBoundsException 오류 발생

 

  • 리스트
    • 배열: 크기가 정해져 있음 <-> 리스트: 변함
    • ArrayList (import문 작성해야함!)
      • add: 요솟값 추가
      • get: 특정 인덱스 값 추출
      • size: 요소의 개수 리턴
      • contains: 리스트 안에 해당 항목이 있는지 판별해 boolean으로 결괏값 리턴
      • remove:
        • 객체: 객체에 해당하는 항목 삭제 -> 그 결과로 true / false 리턴
        • 인덱스: 인덱스에 해당하는 항목 삭제 -> 그 항목 리턴
        •  
    • 제네릭스: 자료형을 강제로 바꿀 때 생길 수 있는 캐스팅 오류 줄여줌 (안전해짐)
      • ArrayList pitches = new ArrayList(); -> ArraList<String> pitches = new ArrayList<>;
import java.util.ArrayList;

public class Sample {
    public static void main(String[] args) {
        ArrayList pitches = new ArrayList();
        pitches.add("138");
        pitches.add("129");
        pitches.add("142");
        
        System.out.println(pitches.get(1));  // 129 출력
        System.out.println(pitches.size());  // 3 출력
        System.out.println(pitches.contains("142"));  // true 출력
        System.out.println(pitches.remove("129"));  // 129를 리스트에서 삭제하고, true를 리턴한다.
        System.out.println(pitches.remove(0));  // pitches의 첫 번째 항목이 138이므로, 138을 삭제한 뒤 138을 리턴한다.
    }
}

QUIZ

Q1. 다음 중 int 자료형의 크기는?

A1. 32비트

 

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

A2. float

 

Q3. double 자료형과 float 자료형의 차이점은 무엇인가?

A3. double은 64비트, float은 32비트이다.

 

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

A4. true와 false

 

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

A5. isEmpty()

 

Q6. 다음 중 boolean 표현식을 적절히 사용하는 경우는?

A6. boolean y = true;

 

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

A7. "example"

 

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

A8. length()

 

Q9. 다음 코드의 출력 결과는 무엇인가?

String s1 = "Java";
String s2 = new String("Java");
System.out.println(s1 == s2);

A9. false

 

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

A10. length

 

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

A11. int [] [] arr = new int [2][2];

 

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

A12. 0

 

Q13. 배열의 인덱스는 몇부터 시작하는가?

A13. 0

 

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

int[] arr = {1, 2, 3, 4};
System.out.println(arr[2]);

A14. 3

 

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

A15. HashSet

 

Q16. 다음 중 ArrayList의 기본적인 특징은 무엇인가?

A16. 임의 접근이 가능하다.

 

Q17. List에서 요소를 추가할 때 사용하는 메서드는?

A17. add()

 

Q18. 다음 코드의 출력 결과는 무엇인가?

List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
System.out.println(list.get(1));

A18. Python

 

Q19. List의 요소를 반복하기 위해 사용할 수 있는 방법인 것은?

A19.  모두 맞음

 

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

A1. 기본 자료형은 리터럴 표기 방식으로만 값을 설정할 수 있지만 참조 자료형은 new 키워드 방식을 사용할 수 있다. String은 리터럴 표기 방식을 사용할 수 있지만 기본 자료형이 아니다.

 

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

A2. int는 정수지만 double은 부동소수점으로 표현되는 실수이기 때문에 int에서 double로의 변환 시에는 소수점 이하에서 계산 오류가 나는 문제가, double에서 int로의 변환 시에는 소수점 이하 값이 잘리는 문제가 발생한다.

 

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

A3. 리터럴 방식은 문자열을 String Pool(상수 풀)에 저장하고 new 키워드는 새로운 객체를 생성한다.

 

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

A4. String은 문자열을 수정할 때마다 새로운 객체를 생성하지만 StringBuilder는 하나의 객체 안에서 수정을 거치기 때문에 문자열을 많이 연결할수록 성능 면에서는 StringBuilder가 더 유리하다.

 

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

A5. == 연산자는 객체가 같은지 판별하고 equals 메서드는 문자열의 값이 같은지 판별한다.

 

서술형6. 배열 선언 방법 2가지를 작성하시오.

A6. int[] odds = {1, 3, 5, 7, 9}; / int[] odds = new int[5];

 

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

A7. 배열은 생성할 때 크기가 고정되기 때문에 크기를 변경할 수 없지만 리스트는 크기가 변할 수 있어서 리스트를 사용하면 된다.

 

코딩테스트

 

반응형