티스토리 뷰
강사 : 김호진 강사님
자바에서 제공하는 이항 연산자들
이항 연산자
/, % 연산자 : 피연산자 중 어느 하나가 실수일 경우에만 연산을 진행(정수, 정수일 경우 정수 기반 연산 진행)
복합대입 연산자
a = a + b |
동 일 |
a += b |
a = a - b |
a -= b |
|
a = a * b |
a *= b |
|
a = a / b |
a /= b |
|
a = a % b |
a %= b |
'a를 b만큼 연산시켜라'라고 이해하는 게 좋음
관계 연산자
- = : 대입 연산자. 오른쪽에 주목. 연산 순서가 가장 마지막임
- == : 관계 연산자(같다)
- != : 관계 연산자(같지 않다)
관계연산자는 연산의 결과로 true / false 반환
논리 연산자
같은 기호를 두개씩 쓰는 경우에는 하나짜리를 비트 단위 연산자에서 먼저 선점해서 사용중인 경우(비트 단위 연산자가 논리 연산자보다 먼저 만들어짐)
- && : A와 B 모두 true이면 연산결과는 true (논리 AND)
- || : A와 B 둘 중 하나라도 true이면 연산결과는true (논리 OR)
- ! : 연산결과는 A가 true이면 false, A가 false이면 true (논리 NOT)
SCE(Short-Circuit Evaluation) : 논리 연산자의 결과가 결정된 경우에는 더이상 연산을 진행하지 않음
자바에서 제공하는 단항 연산자들
부호 연산자
- - : 단항 연산자의 부호 연산자로서 부호를 바꾸는 역할을 함
- + : 단항 연산자로서 특별히 하는 일이 없음
증가, 감소 연산자
- ++(prefix) : 피연산자에 저장된 값을 '지금 당장' 1 증가시켜라 ex) ++a
- --(prefix) : 피연산자에 저장된 값을 '지금 당장' 1 감소시켜라 ex) --a
- ++(postfix) : 피연산자에 저장된 값을 '다음 연산부터' 1 증가시켜라 ex) a++
- --(postfix) : 피연산자에 저장된 값을 '다음 연산부터' 1 감소시켜라 ex) a--
비트와 관련이 있는 연산자들
비트 연산자의 특징
처리 속도가 빠르다!!!!!!!!!!!
비트 연산자
- & : 비트 단위로 AND 연산을 한다. ex) n1 & n2
- | : 비트 단위로 OR 연산을 한다. ex) n1 | n2
- ^ : 비트 단위로 XOR 연산을 한다.(두 개의 결과가 다를 경우에만 true 반환) ex) n1 ^ n2
- ~ : 피연산자의 모든 비트를 반전시켜서 얻은 결과를 반환 ex) ~n1
※A와 B의 값을 swap 시키는 경우에는 비트 단위 연산이 유리
비트 쉬프트(Shift) 연산자
- << : 피연산자의 비트 열을 왼쪽으로 이동. 기존의 비트가 한 바퀴를 돌아올 경우에도 발현됨(한 바퀴를 돌기 전까지는 잠복...)
- >> : 피연산자의 비트 열을 오른쪽으로 이동. 이동에 따른 빈 공간의 경우 1로 채움(부호를 유지시키기 위해서)
- >>> : 피연산자의 비트 열을 오른쪽으로 이동. 이동에 따른 빈 공간의 경우 0으로 채움
※'<<'와 '>>>' 연산자를 한 쌍으로 보자!
조건문
if~else
if~else 구문을 중첩시켜서 사용하는 경우, 조건문의 순서가 중요!
switch와 break
switch문은 끝까지 다 훑는게 기본 모델!
switch문 안의 조건은 JDK 1.5부터 문자도 사용 가능
for, while 그리고 do~while
- while : 반복(조건에 맞는 경우에만 수행)
- do~while : 일단 한번 해봐(그리고 조건을 따져서 반복 수행)
continue & break
- continue : (뒷부분을 무시하고) 계속해라...
- break : 멈춰라... (그리고 빠져나가라)
※break는 break를 감싸고 있는 가장 가까운 반복문 하나를 빠져나감
break lable(레이블) : 둘 이상의 반복문을 벗어날 때 사용 고려
메소드의 재귀호출
재귀적 메소드 정의
재귀는 '코드의 복사본이 실행된다'라고 생각하는 것이 재귀의 이해에 도움이 된다!
클래스와 인스턴스
자바는 객체지향 프로그래밍 즉, 객체 중심의 프로그래밍 언어이다.
- 객체 : 현실 세계에 존재하는 모든 것(객체 = 속성 + 기능)
- 클래스 : 객체를 설계하는 것. 속성(데이터)과 기능(메소드)로 구성
- 인스턴스 : 클래스를 바탕으로 객체를 실체화하는 것
※인스턴스 생성 = 객체 생성(같은 말이야)
- final 키워드 : 변수를 상수화한다. (변경할 수 없음)
new도 연산자!
입/출력 스트림
입/출력 스트림은 기본적으로 문자 기반 입/출력 스트림과 바이트 기반 입/출력 스트림으로 나뉨
- System.in : 바이트 기반 입력 스트림
- BufferedReader : 문자 기반 입력 스트림
- InputStreamReader : 바이트 기반 입/출력 스트림을 문자 기반 입력 스트림으로 바꿔주는 역할
자바는 '단일 입/출력'으로 큐의 구조를 가짐
입력 스트림을 사용하는 경우에는 예외 처리를 위한 'throws IOException'을 사용해줘야 함(혹시 모르는 오류 상황을 처리해주기 위해서 필요)
- Integer.parseInt : 정수 형태의 데이터를 문자열 형태로 변환
- java.lang.* : 기본적으로 들어가있는 클래스 ex) Integer, Character, String...
객체 생성과 참조 관계에 대한 논의
FruitSeller seller = new FruitSeller();
→ seller는 새로 생성된 FruitSeller 객체를 참조하고 있음
FruitSeller seller1 = new FruitSeller();
FruitSeller seller2 = seller1;
→ seller1과 seller2 모두 같은 FruitSeller를 참조하고 있음
- null : '아무것도 없음'을 의미(아무것도 없는 '상태'를 의미)
생성자(Constructor)
메소드 이름의 첫 글자가 대문자인 경우에는 일반적인 메소드가 아닌 '생성자'라고 함 ex) BufferedReader()
인자 = 인수 = 파라매터 = 매개변수
생성자의 특징
- 생성자는 메소드다.
- 일반 메소드와 달리 부르고 싶을 때 불러서 쓸 수 있는 메소드는 아니다.
- 인스턴스 생성 시에만 단 한번 호출할 수 있다.
- 생성자는 클래스의 이름과 완벽히 일치해야하기 때문에 첫글자가 대문자이다.
- final 변수를 초기화 할 수 있다. (생성자의 특권!)
생성 위치에 따른 변수 구분
- 전역 변수 : 클래스 안에서 선언한 변수
※전역 변수는 자동 초기화를 지원함
- 지역 변수 : 메소드 안에서 선언한 변수
- 멤버 변수 : 클래스 안에 소속된 변수
생성 시점에 따른 변수 구분
- 인스턴스 변수 : 인스턴스가 생성될 때 메모리를 할당받는 변수
- 클래스 변수 : 클래스가 로딩될 때 메모리를 할당받는 변수
- static 변수(=클래스 변수) : 변수명 앞에 'static'이 붙어있는 변수. 각각의 인스턴스들끼리 공유 가능
※인스턴스 변수는 클래스 변수보다 나중에 생성될 수 밖에 없음
생성자의 역할
- 메모리 할당
- 초기화
생성자의 조건
- 생성자는 일반 메소드처럼 호출될 수 없으며, 반환 자료형을 가질 수 없다. (void도 안됨)
- 생성자는 클래스와 동일한 이름을 가져야 한다. (대소문자 구분까지 엄격하게 적용)
- 생성자는 객체를 생성하는 과정에서 'new 생성자()'의 형태로 딱 한 번만 호출된다. (인스턴스 생성 시 단 한 번 호출)
실습
Test01: 연산자(Operator)
/*========================================
* ■■■ 연산자(Operator) ■■■
* - 비트 단위 연산자(xor)를 활용하여
* 두 변수에 담겨있는 내용(값) 바꾸기
========================================*/
// 실행 예
// x : 20, y : 30
// 연산 처리 후
// x : 30, y : 20
package com.test;
public class Test01
{
public static void main(String[] args)
{
/*
// 주요 변수 선언
int x, y, temp;
// 연산 및 처리
x = 20;
y = 30;
// 결과 출력
System.out.println("x : " + x + ", y : " + y);
// 추가 연산 및 처리
temp = x;
x = y;
y = temp;
// 추가 결과 출력
System.out.println("연산 처리 후");
System.out.println("x : " + x + ", y : " + y);
*/
//처리 속도도 빠르고 메모리도 아끼는 훨씬 효율적인 방법!
// 주요 변수 선언
int x, y;
// 연산 및 처리
x = 20;
y = 30;
// 결과 출력
System.out.println("x : " + x + ", y : " + y);
// 추가 연산 및 처리
x = x ^ y;
y = y ^ x;
x = x ^ y;
// 추가결과 출력
System.out.println("연산 처리 후");
System.out.println("x : " + x + ", y : " + y);
}
}
Test02
package com.test;
public class Test02
{
public static void main(String[] args)
{
showHi(3);
}
public static void showHi(int cnt)
{
/*
* 잘못된 소스
System.out.println("Hi~ ");
showHi(cnt--);
if(cnt==1)
return;
*/
System.out.println("Hi~ ");
if(cnt==1)
return;
showHi(--cnt);
}
}
Test03: 클래스와 인스턴스
/*========================================
* ■■■ 클래스와 인스턴스 ■■■
========================================*/
// 사용자로부터 임의의 정수를 입력받아
// 입력받은 정수가 양수인지, 음수인지, 0인지 구분하여
// 결과를 출력하는 프로그램을 구현한다.
// 단, 입력받는 데이터는 BufferedReader 의 readLine() 을 활용하여
// 넘겨받을 수 있도록 처리한다.
// 또한, 조건 연산자를 활용할 수 있도록 한다.
// 실행 예)
// 임의의 정수 입력 : -12
// -12 → 음수
// 임의의 정수 입력 : 7
// 7 → 양수
// 임의의 정수 입력 : 0
// 0 → 영
package com.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test03
{
public static void main(String[] args) throws IOException
{
// BufferedReader 인스턴스(객체) 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n;
String strData;
System.out.print("임의의 정수 입력 : ");
n = Integer.parseInt(br.readLine());
/* if~else 구문 사용
if(n == 0)
strData = "영";
else if(n > 0)
strData = "양수";
else
strData = "음수";
*/
// 조건 연산자(삼항 연산자) 사용
strData = n == 0 ? "영" : n > 0 ? "양수" : "음수";
// 결과 출력
System.out.print(n + " → " + strData);
}
}
Test04
package com.test;
public class Test04
{
int num;
public static void main(String[] args)
{
Test04 ob = new Test04();
// 초기화하지 않아도 자동으로 0으로 초기화
System.out.println(ob.num);
int num2;
}
}
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[JAVA] 교육 3일차 과제 - Work03: 2의 배수? 3의 배수? (0) | 2018.01.04 |
---|---|
[JAVA] 교육 3일차 (0) | 2018.01.04 |
[JAVA] 교육 2일차 과제 - Work02: 무슨 요일? (0) | 2018.01.04 |
[JAVA] 교육 2일차 과제 - Work01: 윤년? 평년? (0) | 2018.01.04 |
[JAVA] 교육 1일차 (0) | 2018.01.04 |
- Total
- Today
- Yesterday
- 코딩테스트
- 블록 체인
- Hyperledger Fabric v1.2
- Private Data
- 빅데이터 강의
- Blockchain
- 어서와 데이터는 처음이지
- 문제풀이
- 암브로셔스
- 코딜리티
- codility
- 빅데이터
- 기초 of 기초 데이터 개념
- ambrosus
- 알고리즘
- DOCs
- 빅데이터 교육
- ubuntu
- Hyperledger Indy
- Hyperledger Fabric
- 하이퍼레저 패브릭
- 블록체인
- Hyperledger Fabric v1.1
- 빅데이터 기초
- 하이퍼레저 페브릭
- javascript
- 코테
- 하이퍼레저 인디
- 직딩잇템
- docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |