c, 자바 같은 컴파일 언어는 변수 사용 전 반드시 자료형 선언 필요 변수 자료형 선언 시 변수 이름 앞에 자료형 표기 변수에 자료형이 선언되면 메모리에는 변수 값을 저장할 수 있는 공간이 만들어진다. \*주의 1\. 자료형은 반드시 사용하기 전에 선언해야 한다. 그렇
변수와 상수의 이름을 지을 때에는 필수 사항과 권장 사항을 준수해야 한다. 필수 사항은 지키지 않으면 문법 오류가 발생해 컴파일 자체가 안 된다. 반면 권장 사항은 개발자끼리 약속한 정도로 이해하면 되고 지키지 않는다 하더라도 문법 오류가 발생하지 않는다. 하지만 권장
자료형은 크게 '기본 자료형'과 '참조 자료형'으로 나눌 수 있다. 자바에는 8가지 기본 자료형이 있으며 이외의 모든 자료형은 '참조 자료형'이라고 보면 된다. 참조 자료형은 개발자가 직접 정의할 수도 있으므로 가짓수가 무한개이다. 자료형을 이렇게 구분해야 하는 이유는
기본 자료형과 참조 자료형의 첫 번째 차이점은 자료형 자체의 이름 규칙에 있다. 자바에서 제공하는 기본 자료형 8개의 이름은 모두 소문자(int long float double ...)로 시작하는 반면, 참조 자료형의 이름은 모두 대문자 (String, System,
기본 자료형에는 참 true 과 거짓 false 을 저장하는 boolean, 정수를 저장하는 byte, short, int, long, 실수를 저장하는 float과 double문자(정수)를 저장하는 char 자료형이 있다. 각 자료형이 차지하는 메모리의 크기와 저장할
boolean은 true(참)과 false(거짓)의 값만 저장할 수 있는 자료형이다. 불리언은 이렇게 2가지 값만 포함할 수 있으므로 실제로는 1bit로도 충분하지만, 자료 처리의 최소 단위가 바이트 이므로 1byte가 할당된다. 실제로 할당된 1byte(=8bit)
실수도 크기가 서로 다른 2가지 자료형을 제공한다. 저장하고자 하는 실숫값을 지수와 가수로 표현하는 부동 소수점 방식으로 저장하므로 오차가 발생할 수 있지만 매우 넓은 범위의 값을 저장할 수 있다. 앞서 공부한 것처럼 float 자료형의 정밀도는 소수점 7자리, dou
char은 문자를 저장하는 자료형으로, 문자를 작은따옴표(")안에 표기한다. char 자료형은 정수를 저장할수도 있지만, 앞에서 배운 정수 자료형 4가지와 다소 차이가 있다. A라는 문자를 char 자료형에 저장하기 위해 코드를 char = 'A'와 같이 작성했다면 메
boolean을 제외한 기본 자료형 7개는 자료형을 서로 변환할 수 있는데 이를 '타입 변환 type casting'이라고 한다. 앞에서 공부한 것처럼 자바는 항상 대입 연산자(=)를 중심으로 왼쪽 오른쪽 자료형을 일치시켜야 하므로 타입 변환을 수행해야 할 때가 있다.
타입 변환에는 컴파일러가 자동으로 수행하는 '자동 타입 변환'과 개발자가 직접 타입 변환을 수행해야 하는 '수동 타입 변환'이 있다. 먼저 크기(범위)가 작은 자료형을 큰 자료형에 대입할 때를 살펴보자. 이때는 어떠한 데이터 손실도 발생하지 않는다. 따라서 작은 자료형
boolean을 제외한 나머지 기본 자료형은 서로 연산할 수 있다. 이때 모든 연산은 같은 자료형끼리만 가능하며 연산 결과 역시 같은 자료형이 나온다. 단, int보다 작은 자료형 간의 연산 결과는 int가 나온다. 예를 들어 byte+byte,short+short,b
Q1. 다음 중 변수나 상수 선언 명령으로 적절한 것은 O, 그렇지 않은 것은 X를 표시하고, 적절하지 않은 것에는 그 이유를 적으시오 Q2 다음 코드에서 변수 a,b,c가 메모리에 생성되는 행 번호와 사라지는 행 번호를 쓰시오.Q3 소문자 'a'를 나타내는 유니코드값
자바의 연산자는 연산 결과의 특징에 따라 3가지로 나눌 수 있다. 첫째, 연산 결과가 특정 값이 나오는 "산술, 증감, 비트, 시프트" 연산자.둘째, 연산 결과가 참(true)과 거짓(false)의 값으로만 나타나는 "비교, 논리" 연산자.마지막, 값을 반환하는 것이
산술 연산자는 가장 기본적인 연산자로, 사칙연산(+, -, \*, /)과 나머지 연산(%)이 있다. 이 중 '정수 / 정수' 형태의 나누기(/)를 할 때 주의해야 할 필요가 있다. 기본 자료형 간의 연산에서도 언급한 것처럼 int / int = int이므로 5 / 2
비트 연산자는 말 그대로 비트 단위의 연산자로 AND(&),OR(|),XOR(^),NOT(~)이 있다.비트 AND(&)는 두 값이 모두 1일 때만 1인 연산자, 비트 OR(|)은 두 값이 모두 0일 때만 0인 연산자다. 비트 XOR(^)은 두 값이 같을 때 0, 다를
시프트shift 연산자는 비트의 위치를 좌우로 이동하는 연산으로 산술 시프트(<<,>>)와 논리 시프트(>>>)가 있다.산술 시프트는 숫자의 부호 비트는 유지하면서 나머지 비트를 왼쪽(<<) 또는 오른쪽(>>)으로 이동하는 연산자다. <<
비교 연산자는 크게 크기 비교(>,<,>=,<=)와 등가 비교 (==, !=)로 나눌 수 있다.연산 결과는 불리언 자료형, 즉 true와 false 중 하나를 나타낸다. 참고로 크거나 같다(>=), 작거나 같다(<=), 같지 않다(!=)와 같이 등호를
논리 연산자는 비트 연산자와 매우 비슷하지만, 피연산자로 불리언값(true 또는 false)만 올 수 있고, 연산 결과 또한 불리언 타입만을 가진다. 논리 AND(&&)는 두 값이 모두 true일 때만 true, 나머지는 모두 false 값을 가진다. 반면 논리 OR(
대입 연산자(=)는 오른쪽 피연산자의 연산 결과를 왼쪽 변수에 대입하는 연산자로, 앞으로 가장 많이 사용하게 될 연산자 중 하나다. 예를 들어 a = 3이라는 코드는 오른쪽 값인 3을 변수 a에 대입하라는 명령이다. 그러면 a = a + 3을 살펴보자. 수학에서는 말이
삼항 연산자는 다음과 같이 자바 연산자 중 유일하게 3개의 피연산자가 있는 연산자다. 삼항 연산자의 구성> (참 또는 거짓) ? 참일 때 연산 결과 : 거짓일 때 연산 결과 물음표(?) 앞에는 불리언 자료형인 참(true) 또는 거짓(false)만 올 수 잇으므로 불리
Q1. 다음은 산술 연산에 관한 코드다. 출력값을 쓰시오 Q2. 다음은 증감 연산에 관한 코드다. 출력값을 쓰시오. Q3 다음은 비트 연산자에 관한 코드다. 출력값을 쓰시오( 3 = 0b00000011, 5 = 0b00000101이며, 출력값은 2진수로 표현해도 됨).
프로그램은 기본적으로 소스 코드를 위에서부터 차례대로 1줄씩 처리한다. 프로그램을 작성하다 보면 이런 처리 순서를 의도적으로 바꿔야 할 때가 왔는데 이 역할을 수행하는 것이 바로 '제어문'이다. 제어문과 제어 키워드를 이용하면 프로그램의 실행 순서를 다양한 방법으로 제
if문은 조건식에 따라 실행문의 실행 여부를 결정하는 선택 제어문이다. 기본적인 문법 구조는 크게 3가지 유형으로 나뉜다. 먼저 유형 ①은 조건식 1개, 중괄호 1개가 있는 구조로, '조건식 = true'일 때 중괄호 안을 실행하고 '조건식 = false'일 때 중괄호
switch 문은 점프 위치 변숫값에 따라 특정 위치(case)로 이동해 구문을 실행하는 선택 제어문이다. 점프할 수 있는 위치는 'case 위칫값:'으로 설정한다. 이렇게 클론(:) 문자가 붙은 값은 이동할 위치를 가리키는 일종의 팻말 역할을 한다고 생각하면 된다.
for 문은 실행 구문을 반복적으로 수행하는 반복 제어문으로 일반적으로 반복 횟수가 정해질 때 주로 사용한다. 즉, for 문의 구문을 보면 몇 번 반복하는지 유추할 수 있어야 한다. for 문의 기본 문법 구조는 다음과 같다.💨for 문의 구성for 다음의 소괄호(
while 문도 중괄호 안의 실행 구문을 반복적으로 실행하는 반복 제어문으로 소괄호 안의 조건식이 ture인 동안 반복은 지속된다.🔅while 문의 구성 여기서 초기식과 증감식은 불필요할 때 생략할 수 있지만 for 문과 비교하기 위해 기본 문법 구조에 포함시켜 놓았
do-while 문은 while 문과 매우 비슷한 반복 제어문으로 조건식의 검사와 반복 실행의 순서에만 차이가 있다. 일단 do-while문의 기본 문법 구조를 살펴보자👀do-while 문의 구성다른 제어문들과 달리 조금 특이하게 생겼는데 do{...} while(조
앞에서 5개의 제어문을 살펴봤다. 각 제어문 내부에는 또 다른 제어문을 포함할 수 있다. 예를 들어 if 문 내부에 if 문, switch 문 내부에 for 문, for 문 내부에 for 문 등 제어문을 얼마든지 중복해 사용할 수 있다. 물론 3중, 4중으로 중복할 수
4.2.1 break 제어 키워드 break는 'if 문을 제외한 가장 가까운 중괄호를 탈출'하는 제어 키워드다. 이미 switch 문에서 살펴본 적이 있는데, 그때는 switch문을 탈출하기 위한 용도로 사용했다. 일반적으로 break는 반복문에서 특정 조건을 만족할
continue는 반복 제어문의 닫힌 중괄호 역할을 하는 제어 키워드다. 반복 제어문은 조건식이 true가 돼 실행 구문을 실행한 후 닫힌 중괄호를 만나면 다시 다음 반복을 위해 증감식을 수행하거나(for 문) 조건식을 검사(while 문)한다. 즉, 반복문 실행 도중
Q1. 다음과 같이 점수에 따라 학점이 부여되는 코드를 작성하고자 한다. if 선택 제어문의 조건식을 완성하시오.(단 0 <= score <= 100).
5.0자바에서는 8개의 기본 자료형 이외의 모든 자료형은 참조 자료형이다. 대표적인 참조 자료형에는 배열 array, 클래스 class, 인터페이스 interface 등이 있다. 참조 자료형은 개발자가 얼마든지 정의 할 수 있으므로 무한개라 할 수 있다. 먼저 배열을
<mark style='background-color: 선언된 배열 참조 자료형 변수에 생성한 객체를 대입하는 데는 2가지 방법이 있는데, 변수 선언과 값(참조 자료형은 객체)의 대입을 한 번에 작성해도 되고, 따로 구분해 작성해도 된다. 🥨배열 자료형 변수에
지금까지 1차원 배열을 생성하고 값을 대입하는 방법을 알아봤다. 그런데 자바는 앞에서 알아본 방법 외에도 배열을 생성하고 값을 대입하는 다양한 방법을 지원한다. 여기서는 앞의 방법을 포함해 1차원 배열을 생성하거나 값을 대입하는 3가지 방법을 알아본다.방법 ① 배열 객
앞에서도 잠깐 언급한 바와 같이 스택 메모리 변수를 초기화하지 않으면 메모리 공간은 텅 비어 있다. 이 상태에서는 해당 변수를 출력할 때 오류가 발생한다. 기본 자료형 변수이든, 참조 자료형 변수이든 모든 변수는 스택 메모리에 위치하고 있다. 따라서 모든 변수는 초기화
지금까지 배운 배열에 관한 지식만으로도 충분히 기본 자료형과 참조 자료형의 차이를 이해할 수 있다. 이를 위해 기본 자료형과 참조 자료형에서 변수를 복사할 때를 비교해 보자. 먼저 대입 연산자(=)를 이용해 변수가 복사되는 과정을 이해해야 한다. 변수의 어떤 값을 복사
배열은 동일한 자료형을 여러 개 묶어 저장한다고 했다. 따라서 배열의 모든 데이터를 출력하려면 다음처럼 배열의 길이만큼 출력해야 한다.하지만 이건 아닌 듯하다. 하나의 배열 데이터를 출력하기 위해 무려 100줄이나 소비했다. 어쩌면 그나마 배열의 길이가 100이어서 다
가로 및 세로 방향의 2차원으로 데이터를 저장하는 배열이 2차원 배열이다. 그중 직사각형의 형태(모든 행의 길이가 같은 배열)를 띤 배열을 '2차원 정방 행렬 배열'이라고 한다. 2차원 배열을 선언할 때도 배열을 대괄호(\[])로 표시한다. 다만 1차원 배열과 다른
방법 ② 배열 객체의 행 성분부터 생성하고 열 성분 생성하기두 번째 방법은 2차원 배열의 행 성분만 먼저 생성하고 각 행에 열 성분을 생성하는 것이다. 다소 복잡해 보이지만, 앞서 설명한 2차원 배열의 메모리 구조를 이해하면 쉽게 이해할 수 있을 것이다. 작성 방법과
방법 ③ 배열의 자료형과 함께 대입할 값 입력하기2차원 정방 행렬의 객체를 생성하는 세 번째 방법은 자료형과 함께 대입할 값을 입력하는 것이다. 여기서는 배열의 크기가 대입되는 초깃값의 수에 따라 결정되므로 대괄호 안에는 반드시 크기를 지정하지 말아야한다. 🍁배열의
2차원 비정방 행렬은 각 행마다 열의 길이가 다른 2차원 배열을 의미한다. 배열의 구조를 보면 각 행별로 들쑥날쑥한 것을 알 수 있다. 하지만 기본적인 개념은 2차원 정방 행렬과 완벽하게 동일하다. 즉, 1차원 배열을 원소로 포함하고 있는 1차원 배열인 셈이다. 원소인
2차원 배열은 가로, 세로 방향으로 데이터가 분포돼 있어 2개의 인덱스를 사용해야 한다. 따라서 2차원 배열의 모든 데이터를 출력하기 위해서는 기본적으로 이중 for 문을 사용해야 한다. 여기서 중요한 것은 반복 횟수를 지정하는 것이다. 앞서 살펴본 2차원 비정방 배열
그동안의 예제를 작성하면서 기계적으로 작성했던 main() 메서드를 살펴보면 다음과 같이 배열이 입력매개변수의 형태를 띤다는 것을 알 수 있다. 즉 자바 코드를 실행하면 자바 가상 머신은 가장 먼저 main() 메서드를 실행하는데, 이때 개발자는 main()메서드를 실
5.2 문자열을 저장하는 String참조 자료형의 가장 대표적인 형태는 '클래스'다. 이번에는 자바가 제공하는 클래스 중 문자열을 저장하는 String 클래스를 알아보자. 이미 앞에서도 몇 가지 형태의 문자열을 써봤겠지만, 자바에서 가장 많이 쓰는 자료형 중 하나다.5
String 클래스도 당연히 클래스이므로 다른 클래스들의 특징을 모두 지니고 있다. 하지만 워낙 자주 사용되는 클래스이다 보니 다른 클래스에는 없는 2개의 특징이 있다. 첫 번째 특징은 한 번 정의된 문자열은 변경할 수 없다는 것이다. 만일 문자열의 내용을 변경하면 자
String 객체는 + 연산을 이용해 문자열을 연결할 수 있다. 당연히 '더하기'의 의미가 아니라 '연결하기'의 의미다. String 객체의 +연산은 크게 2가지의 형태가 있다. 첫 번재는 '문자열 + 문자열'의 형태인데, 이때는 그대로 문자열을 연결한 결과가 리턴된다
String 클래스는 문자열의 길이, 문자열 검색, 문자열 변환 및 연결 문자열 수정이나 내용 비교 등 매우 풍부한 메서드를 제공한다. 밑의 표는 줄이고 줄여 가장 대표적 인것만 뽑아낸 것이다. 나중에 자바를 이용해 프로젝트를 수행하다 보면 다음 메서드들은 적어도 한
Q1 배열의 2가지 특징
6.1 클래스와 객체의 개념자바는 객체지향형 프로그래밍 언어로 클래스, 추상 클래스, 인터페이스와 같은 객체 지향적 문법 요소를 통해 프로그램을 구성한다. 자바를 제대로 사용하려면 이러한 문법 요소를 이해해야 한다. 먼저 기본 문법 요소인 클래스에 관해 알아보자.6.1
객체지향의 개념을 사용하기 전에는 대부분의 프로그램을 절차지향형으로 구현했다. 절차지향형 프로그래밍은 순서에 맞춰 단계적으로 실행하도록 명령어를 나열하는 방식을 말한다. 클래스를 사용한 후에는 객체지향형 프로그래밍 OOP : Object-Oriented Programm
클래스의 전체적인 구조를 살펴보기 전에 클래스를 정의하는 방법부터 알아보자. 클래스는 class 키워드와 함께 클래스명을 표기한다. 클래스명은 대문자로 시작하는 것이 관례다. 🐸클래스의 정의클래스의 정의를 알아보았으니 다음과 같이 A라는 이름의 클래스를 포함하는 자
클래스를 활용하는 방법을 본격적으로 다루기 전에 클래스와 객체의 개념을 구분할 수 있어야 한다. 클래스와 객체를 구분할 때 예시로 가장 많이 나오는 것이 붕어빵 기계다. 클래스를 붕어빵 기계에 비유한다면 객체는 붕어빵 기계로 찍어 낸 붕어빵에 비유할 수 있다. 우리가
6.2 객체의 생성과 활용이번에는 클래스로 객체를 생성하고 활용하는 방법을 알아보자. 붕어빵 이야기로 비유하면 붕어빵 기계(클래스)에서 붕어빵을 찍는 방법(객체 생성)과 붕어빵을 맛있게 먹는 방법(객체의 활용방법)을 알아보는 것이다.6.2.1 객체 생성하기객체는 new
이제 생성한 객체를 활용해 보자. 객체를 활용한다는 것은 객체 내부의 멤버를 사용한다는 의미다. 예를 들어 필드를 사용한다는 것은 필드에 값을 넣거나 읽어온다는 것, 메서드를 사용한다는 것은 해당 메서드를 호출하는 것을 말한다. 포인트 연산자 사용하기자바에서는 힙 메모
Q1 클래스 내부에 올 수 있는 4가지 구성 요소와 외부에 올 수 있는 3가지 구성 요소를 쓰시오.클래스 내부 : 필드, 메서드, 이너 클래스, 생성자클래스 외부 : 패키지, 임포트, 외부 클래스Q2 다음과 같이 클래스 A가 정의돼 있을 때 다음 코드를 작성하시오.
필드field는 '클래스에 포함된 변수'로 객체의 속성값을 지정할 수 있다. 필드는 지역 변수 local variable와 구분해야 한다. 지역 변수는 '메서드에 포함된 변수'를 말한다. 즉, 필드와 지역 변수는 어떤 중괄호 안에 선언됐는지에 따라 구분할 수 있다. 클
필드와 지역 변수의 또 다른 차이점은 초깃값이다. 필드는 직접 초기화하지 않아도 강제로 초기화된다. 반면, 지역 변수는 직접 초기화 하지 않으면 저장 공간이 빈 공간 그대로 있어 값을 출력하고자 할 때 오류가 발생한다. 이는 사실 필드와 지역 변수의 차이가 아니라 각각
이제 클래스의 내부 구성 요소 중 두 번째인 메서드를 알아보자.7.2.1 메서드 정의하기메서드는 클래스의 기능에 해당하는 요소다. 예를 들어 사람 클래스라면 먹기, 잠자기, 공부하기, 자동차 클래스라면 전진하기, 후진하기, 회전하기 등이 메서드로 구성될 것이다. 먼저
간단한 예제를 살펴보자. 첫 번째 예제는 리턴 타입이 void이고 입력매개변수가 없을 때다. 리턴 타입이 void일 때는 메서드가 반환하는 값이 없다는 것을 의미한다. 즉, 메서드가 종료된 이후에 아무런 값으로 변하지 않으며, 메서드 내부에 'return 리턴값'의 코
이제 정의한 메서드를 호출해보자클래스 외부에서 메서드 호출하기 메서드도 클래스의 멤버이므로 객체 안에 존재할 것이고, 클래스 외부에서 메서드를 사용하려면 먼저 객체를 생성해야 할 것이다. 이어서 객체의 위치를 저장하고 있는 참조 변수를 이용해 메서드를 호출해야 한다.
입력 매개 변수가 배열인 메서드 호출하기앞 예제에서 입력매개변수는 모두 기본 자료형이었다. 이제 다음과 같이 입력매개변수가 배열일 때를 살펴보자. printArray() 메서드는 입력매개변수로 int\[]자료형을 포함하고 있다. 따라서 이 메서드를 호출하기 위해서는 i
메서드 오버로딩을 이해하기 위해서는 먼저 메서드 시그너처mathod signature의 의미를 알아야 한다. 메서드 시그너처는 메서드명과 입력매개변수의 자료형을 말한다. 시그너처(서멍)라는 말에서 유추할 수 있듯이 메서드를 구분하는 기준 역할을 한다. 자바 가상 머신은
앞에서 메서드 시그니처는 입력매개변수의 개수 또는 입력매개변수의 자료형에 따라 구분된다고 했다. 만일 어떤 메서드가 입력매개변수로 0~10개 사이의 int 자료형 값을 받는다고 가정하자. 정확히 몇 개의 입력이 들어올지 모르므로 0 ~ 10개, 즉 11개의 메서드를 모
생성자 constructor는 객체를 생성하는 역할을 지닌 클래스의 내부 구성 요소다. 또한 객체 내에 포함되는 필드의 초기화 또한 주로 생성자 내에서 수행한다.7.3.1 생성자의 특징생성자를 작성할 때 꼭 지켜야 하는 문법적 규칙은 2가지다. 첫 번째는 반드시 클래스
생성자의 모양에 따라 객체를 생성하는 방법이 결정된다. 어떤 클래스 안에 기본 생성자만 있다면 기본 생성자 모양으로만 객체를 생성할 수 있고 int형을 입력매개변수로 표함하고 있는 생성자만 있다면 int형 값을 입력으로 받아 생성자를 호출해야만 객체를 만들 수 있다.
7.4 this 메서드와 this()메서드클래스의 외부에서 멤버(필드, 메서드, 이너 클래스)를 호출하기 위해서는 객체를 먼저 생성한 후 '참조 변수명.멤버명'의 형태로 호출하지만 클래스 내부에서는 개체의 생성 없이 필드와 메서드를 바로 사용할 수 있다고 했다. 하지만
이번에는 this() 메서드를 알아보자. this 키워드와 매우 비슷하게 생겼지만 의미는 전혀 다르다. this() 메서드는 자신이 속한 클래스 내부에 다른 생성자를 호출하는 명령이다. 만일 클래스 명이 A라면 A() 생성자를 호출하는 것이라고 생각하면 된다. 만일 t
Q1 클래스 A가 다음과 같이 정의돼 있다.다음 코드의 출력 값을 쓰시오.Q2 4가지 형태로 오버로딩된 print() 메서드의 실행 결과가 다음과 같이 출력되도록 클래스 A를 완성하시오.Q3 다음의 클래스 A 내부에는 int\[] 객체를 입력매개변수로 입력받아 배열의
패키지는 비슷한 목적으로 생성된 클래스 파일들을 한곳에 모아둔 폴더를 의미한다. 프로그램을 작 ㅂ성하다 보면 각각의 목적에 따라 여러 개의 클래스 파일(네트워크 처리를 위한 클래스 10개, GUI 처리를 위한 클래스 8개 등)들이 생긴다. 이렇게 동일한 목적으로 만들어
임포트는 다른 패키지 내의 클래스를 사용하기 위한 문법 요소로 소스 코드상에서 패키지 구문의 다음 줄에 위치한다. 프로그램이 동작할 때는 일반적으로 자신의 패키지 내부에 위치한 클래스만 사용할 수 있다. 만일, 자바가 제공하는 API나 다른 개발자가 만든 패키지에 위치