티스토리 뷰

반응형

 강사 : 김호진 강사님


자바에서 제공하는 이항 연산자들

이항 연산자

/, % 연산자 : 피연산자 중 어느 하나가 실수일 경우에만 연산을 진행(정수, 정수일 경우 정수 기반 연산 진행)

복합대입 연산자

 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;
	}

}



반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함