본문 바로가기

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

[2024-2 Java 스터디] 김지수 #1주차

반응형

테고리 없음jisu00913 2024. 10. 8. 15:55

자바란?

처음에는 가전제품에 탑재해 동작하는 프로그램을 만들기 위해 탄생했으나 지금은 웹과 모바일 앱 개발에서 가장 많이 사용하는 언어로 성장했다.

자바는 특히 우리나라에서 쓰이는 프로그래밍 언어 중 사용 빈도가 매우 높다. 기업에서 사용하는 프로그램의 80% 이상은 자바로 만들어졌다고 해도 과언이 아니다. 또한 오랜 시간 굳건히 생태계를 구축하고 유지해 왔기 때문에, 자바를 기반으로 한 수많은 라이브러리들이 존재한다. 따라서 우리나라 기업에서 개발자로 일하고 싶다면 자바를 배울 것을 강력히 추천한다.


자바의 8가지 특징

간단하다 (Simple)

자바는 고급 언어에 들어 있는 여러 요소 중에서 불필요하다고 판단되는 것을 모두 제거했다.

 

객체 지향적이다 (Object-oriented)

자바는 숫자(int, float, long 등)나 논릿값(true, false)을 제외하면 거의 모두 객체로 구성된다.

 

인터프리터 언어이다 (Interpreted)

자바는 정확하게 말하면 컴파일 언어인 동시에 인터프리터 언어이다. 자바는 먼저 텍스트 소스를 컴파일하여 이진 파일(클래스 파일)로 만든 다음, 자바 런타임이 이 클래스 파일을 인터프리트 interpret 하면서 실행한다.

 

강력하다 (robust)

자바는 포인터 연산을 지원하지 않는다. 이는 잘못된 주소를 가리킬 가능성을 사전에 없앤 것이다. 자바는 모든 메모리 접근을 자바 시스템이 관리하고 제한하며, 또한 예외 처리까지 하므로 시스템이 붕괴될 우려가 없다.

 

안전하다 (Secured)

자바는 프로그램을 작성할 때 자료형 타입에 매우 민감하다. 그래서 자바는 일단 컴파일만 되면 실행할 때 오류 발생률이 다른 언어에 비해 현저히 낮다. 자바의 이런 족쇄 같은 자료형 체크는 코드를 매우 명확하게 만들어 준다.

 

플랫폼이 독립적이다 (Platform independent)

자바의 실행 파일은 이진 코드(클래스)이므로 자바 런타임을 설치한 시스템에서는 어디서나 실행할 수 있다. 즉, 자바로 작성한 프로그램이라면 운영체제와 상관없이 어디서든 실행할 수 있다는 뜻이다.

 

멀티 스레드를 지원한다 (Multithreaded)

멀티 스레드를 지원하면 프로그램 단위가 같은 스레드를 동시에 수행할 수 있다. 자바는 멀티 프로세서 하드웨어를 지원하도록 설계되었으므로 멀티 CPU 시스템에서 효율이 높다.

 

동적이다 (Dynamic)

자바 인터페이스를 이용하면 모듈을 갱신할 때 다른 모듈까지 모두 갱신할 필요가 없다. 인터페이스가 인스턴스 변수와 도구의 실행문을 모두 배제한 채 객체 간의 상호 작용을 정의하기 때문이다.

 


변수와 자료형

변수 알아보기
int a;
String b;

다음 a, b를 변수(variable)라고 한다.

 

변수 이름을 지을 때는 3가지 규칙을 따라야 한다.

  • 변수명은 숫자로 시작할 수 없다.
  • _와 $ 이외의 특수 문자는 사용할 수 없다.
  • int, class, return 등 자바의 키워드는 변수명으로 사용할 수 없다.

변수명을 정할 때 반드시 피해야 하는 자바의 키워드는 다음과 같다.

 

자료형 알아보기
int a;      // 변수 a의 자료형은 int이다.

변수명 앞의 int, String 등은 변수의 자료형(type)을 뜻한다. 앞서 살펴본 int a;라는 코드는 다음과 같이 해석된다

 

자주 쓰이는 자료형

  • int
  • long
  • double
  • boolean
  • char
  • String
  • StringBuffer
  • List
  • Map
  • Set

자바의 기초 자료형

숫자
int age = 10; long countOfStar = 8764827384923849L;

자바에서 정수를 표현하는 자료형은 int, long이다. int와 long은 표현할 수 있는 숫자의 범위에 차이가 있다.

 

boolean isSuccess = true;
boolean isTest = false;

참(true) 또는 거짓(false)의 값을 갖는 자료형을 불(boolean) 자료형이라고 한다. 불 자료형에 대입되는 값은 참 또는 거짓만 가능하다.

 

문자
char a1 = 'a'; // 문잣값 앞뒤를 단일 인용 부호 ''로 감싸 주어야 한다.

char 자료형은 사실 프로그램을 작성할 때 그리 많이 사용하는 편이 아니다. 어쩌면 사용할 일이 거의 없을 정도로 char 자료형의 활용성은 적지만 문잣값을 표현하는 방식은 다양하므로 사용할 때 주의해야 한다.

 

문자열
String a = "Happy Java"; // 문자열의 앞과 뒤는 쌍따옴표("")로 감싸야 한다.
String b = "a";
String c = "123";

문자열이란 다음처럼 문자로 구성된 문장을 뜻한다.

 

StringBuffer
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" 출력
hello jump to java

다음은 StringBuffer 객체를 생성하고 문자열을 생성하는 예제이다. StringBuffer 자료형은 append 메서드를 사용하여 문자열을 계속해서 추가해 나갈 수 있다. 그리고 toString() 메서드를 사용하면 StringBuffer를 String 자료형으로 변경할 수도 있다.

 

배열
int[] odds = {1, 3, 5, 7, 9};

1부터 10까지 숫자 중 홀수의 집합은 다음과 같이 int 배열로 표현할 수 있다. int 자료형의 배열은 int[]로 표현한다.

String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};

String 배열로 요일의 집합을 표현할 수도 있다.

 

즉, 배열이란 자료형의 종류가 아니라 자료형의 집합을 의미한다.

 

리스트

리스트(List)는 배열과 비슷하지만 편리한 기능이 더 많은 자료형이다. 리스트와 배열의 가장 큰 차이점은, 배열은 크기가 정해져 있지만 리스트는 변한다는 데 있다. 예를 들어 배열의 크기를 10개로 정했다면 10개를 초과하는 값을 담을 수는 없다. 하지만 리스트는 크기가 정해져 있지 않아 원하는 만큼 값을 담을 수 있다.


퀴즈

  • 다음 중 int 자료형의 크기는? (정답:c)

(a) 8비트

(b) 16비트

(c) 32비트

(d) 64비트

 

  • Java에서 소수점이 있는 실수형 데이터를 저장하기 위해 사용하는 자료형은? (정답:c)

(a) int

(b) long

(c) float

(d) boolean

 

  • double 자료형과 float 자료형의 차이점은 무엇인가? (정답:b)

(a) double은 정수를 표현하고 float은 소수를 표현한다.

(b) double은 64비트, float은 32비트이다.

(c) double은 고정소수점, floa은 가변소수점이다.

(d) 두 자료형의 표현 번위는 같다.

 

  • 다음 중 boolean 자료형이 가질 수 있는 값은? (정답:a)

(a) true와 false

(b) 1과 0

(c) yes와 no

(d) on과 off

 

  • 다음 중 boolean 값을 반환하는 메서드는? (정답:a)

(a) isEmpty()

(b) size()

(c) toString()

(d) charAt()

 

  • 다음 중 boolean 표현식을 적절히 사용하는 경우는? (정답:b)

(a) boolean x = 10;

(b) boolean y = true;

(c) boolean z = "true";

(d) boolean w = 0;

 

  • 다음 중 문자열을 상수 풀(String pool)에 저장하는 방법은? (정답:b)

(a) new String("example")

(b) "example"

(c) String.valueOf("example")

(d) StringBuffer("example")

 

  • 다음 중 문자열 길이를 반환하는 메서드는? (정답:a)

(a) length()

(b) size()

(c) getLength()

(d) count()

 

  • 다음 코드의 출력 결과는 무엇인가? (정답:b)
String s1 = "Java";
String s2 = new String("Java");
System.out.println(s1 == s2);

(a) true

(b) false

(c) 컴파일 오류

(d) 런타임 오류

 

  • Java에서 배열의 길이를 얻기 위해 사용하는 속성은? (정답:c)

(a) size

(b) length()

(c) length

(d) getSize()

 

  • 다음 중 Java에서 다차원 배열을 선언하는 올바른 문법은? (정답:b)

(a) int[][] arr = new int[][];

(b) int[][] arr = new int[2][2];

(c) int arr[][] = new int(2,2);

(d) int arr[][] = new int[2];

 

  • 배열에 초기값 없이 선언된 int 배열의 기본값은? (정답:a)

(a) 0

(b) null

(c) false

(d) 컴파일 오류

 

  • 배열의 인덱스는 몇부터 시작하는가? (정답:a)

(a) 0

(b) 1

(c) -1

(d) 배열에 따라 다름

 

  • 다음 코드의 출력 결과는? (정답:c)
int[] arr = {1, 2, 3, 4};
System.out.println(arr[2]);

(a) 1

(b) 2

(c) 3

(d) 4

 

  • Java에서 List 인터페이스를 구현한 클래스가 아닌 것은? (정답:c)

(a) ArrayList

(b) LinkedList

(c) HashSet

(d) vector

 

  • 다음 중 ArrayList의 기본적인 특징은 무엇인가? (정답:c)

(a) 크기가 고정되어 있다.

(b) 동기화(synchronized)되어 있다.

(c) 임의 접근이 가능하다.

(d) 정렬된 상태를 유지한다.

 

  • List에서 요소를 추가할 때 사용하는 메서드는? (정답:c)

(a) addElement()

(b) put()

(c) add()

(d) insert()

 

  • 다음 코드의 출력 결과는 무엇인가? (정답:b)
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
System.out.println(list.get(1));

(a) Java

(b) Python

(c) null

(d) indexOutOfException

 

  • List의 요소를 반복하기 위해 사용할 수 있는 방법인 것은? (정답:d)

(a) for 루프

(b) while 루프

(c) for-each 루프

(d) 모두 맞음


서술형 문제

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

기본 자료형은 int,float,double,long 등 단순한 데이터를 저장하고 처리하는 데 적합하며, 참조 자료형은 string arrayList 복잡한 데이터 구조나 객체를 다루는데 사용된다.

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

int는 정수이고 double은 부동소수점 숫자여서 변환을 할때 미세한 오차가 발생하거나 데이터 손실이 생길 수도 있다.

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

동일한 문자열을 여러 번 사용할 경우 리터럴 방식이 성능 면에서 유리하다.

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

== 연산자는 같은 객체를 판별하고 equals() 메서드는 결과 값을 판별한다.

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

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

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

변경할 수 없는 이유는 크기를 변경할 경우 확장하거나 축소한 메모리의 위치가 비어있는지 매번 확인할 수 없기 때문이다. 이런 문제를 해결하기 위해서는 ArrayList를 사용하면 크기를 자동 조종할 수 있다.


 

코딩 테스트 문제

  • 숫자 비교하기 (난이도: 하)

 

 

  • 문자열 내 p와 y의 개수 (난이도: 중하)

 

반응형