반응형

swith문에 대해 자세히 알아보자!


 

 

  • if 문의 경우 결과가 참, 거짓 두가지 밖에 없다.
  • 경우의 수가 많아 질 수록 else - if를 계속 추가해야해서 복잡하고, 처리시간도 길어진다.
switch 문
  • 단 하나의 조건식으로 많은 경우의 수를 처리
  • 표현도 간결해 알아보기가 쉽다.
  • 처리할 경우의 수가 많은 경우에는 if문 보다 switch문으로 작성하는 것이 좋다.
  • 단, switch문은 제약조건이 있기 때문에, 경우의 수가 많아도 어쩔 수 없이 if문으로 작성해야하는 경우가 있다.
  1. 조건식을 계산한다.
  2. 조건식의 결과와 일치하는 case문으로 이동한다.
  3. 이후의 문장들을 수행한다.
  4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.

  • 만약 조건식의 결과와 일치하는 case문이 하나도 없으면 default문으로 이동한다.
  • default문은 if 문의 else블럭과 같은 역할이라 생각하면 된다.
  • switch 문의 break 문은 각 case문의 영역을 구분하는 역할을 한다.
  • 만약 break문을 생략하게 된다면 case문 사이의 구분이 없어지는것과 같아, 다른 break 문을 만나거나 switch문 블럭{ } 끝을 만날때 까지 나오는 모든 문장들을 수행하게 된다.
  • 이러한 실수를 방지하기위해 break문을 빼먹지 않도록 주의해야한다.
switch 문의 제약조건

 

  • switch문의 조건식은 결과값이 반드시 정수이어야 한다.
  • 결과값과 일치하는 case문으로 이동하기 때문에 case문의 값 역시 정수이어야 한다.
  • case문의 값이 중복되지 않아야 한다. // 같은 값의 case문이 여러 개 이면 어디로 이동해야할지 모르기 때문!
  • case문의 값은 반드시 상수이어야 한다. // 변수나 실수는 case문의 값으로 사용할 수 없다!

public static void main(String[] args) {

int num, result;

final int ONE = 1;

 

 

switch (result) {

case '1' : // OK. 문자 리터럴(정수 49와 동일)

case ONE : // OK. 정수 상수

case "YES" : // OK. 문자열 리터럴. JDK 1.7부터 허용

case num : // 에러. 변수는 불가

case 1.0 : // 에러. 실수도 불가

 

}

switch문의 제약조건 예제
예제문은 [JAVA의 정석(기초편)_남궁성 지음] 책을 참고하였습니다.

package ch01;

 

import java.util.Scanner;

 

public class SwitchMainTest {

 

public static void main(String[] args) {

System.out.print("현재 월을 입력하세요.>");

 

Scanner sc = new Scanner(System.in);

 

int month = sc.nextInt(); // 화면을 통해 입력받은 숫자를 month에 지정

 

switch (month) {

case 3:

case 4:

case 5:

System.out.println("현재의 계절은 봄입니다.");

break;

case 6:

case 7:

case 8:

System.out.println("현재의 계절은 여름입니다.");

break;

case 9:

case 10:

case 11:

System.out.println("현재의 계절은 가을입니다.");

break;

default: // case 12: case 1: case 2:

System.out.println("현재의 계절은 겨울입니다.");

 

} // end of switch

 

} // end of main

 

} // end of class

 

* case문은 한 줄에 쓰던, 한 줄에 붙여서 쓰던 상관없음.

만약 예제의 switch 문을 if문으로 변경하면 다음과 같다.

if(month== 3 || month == 4 || month == 5) {

System.out.println("현재의 계절은 봄입니다.");

} else if (month== 6 || month == 7 || month == 8) {

System.out.println("현재의 계절은 여름입니다.");

} else if (month== 9 || month == 10 || month == 11) {

System.out.println("현재의 계절은 가을입니다.");

} else { // month == 12, 1, 2

System.out.println("현재의 계절은 겨울입니다.");

}

반응형

'Java > Java 이론' 카테고리의 다른 글

[JAVA] 다형성  (0) 2023.08.10
[JAVA] 객체지향 언어  (0) 2023.08.09
[JAVA] 상속 (2)  (0) 2023.08.08
[JAVA] 상속  (0) 2023.08.08
[JAVA] 배열  (0) 2023.08.04
반응형
객체 지향 패러다임의 핵심

객체와 객체간의 상호작용 그리고 관계를 형성해 나가는 것

 

오버라이딩 : 상속에서는 부모메서드의 재정의가 가능하다.

조상클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다. 상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경해야하는 경우도 존재한다. 이럴 때 조상의 메서드를 오버라이딩한다 라고 한다.

 

class Cal2 extends Cal {

 

public Cal2() {

System.out.println("Cal2() 생성자 호출 - 자식");

}

 

public int minus(int n1, int n2) {

return n1 - n2;

}

@Override // 어노테이션 이라 부른다.

public int mutiply(int n1, int n2) {

if(n1 == 0 || n2 == 0) {

System.out.println("0을 입력하였습니다.");

}

return n1 * n2;

} // 부모메서드를 재정의

위의 예시처럼 부모 클래스의 minus 메서드를 자식 클래스에서 재정의 한 것을 오버라이딩이라고 한다.

 

오버라이딩의 조건

오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부(메서드 이름, 매개변수, 반환타입)는 조상의 것과 완전히 일치해야한다.

다만, 접근 제어자와 예외는 제한된 조건 하에서만 다르게 변경할 수 있다.

 

오버로딩과 오버라이딩
  • 오버로딩 : 기존에 없는 새로운 메서드를 추가하는 것, new
  • 오버라이딩 : 조상으로 부터 상속받은 메서드의 내용을 변경하는 것, change, modify

package ch99;

 

public class Parent {

void parentMethod() {}

}

 

class Child extends Parent{

 

void parentMethod() { // 오버라이딩

// .....

}

void parentMenthod(int i) {} // 오버로딩

 

void childMethod() {}

void childMethod(int i) {} // 오버로딩

void childMethod() {} // 에러, 중복정의 됨

 

}

반응형

'Java > Java 이론' 카테고리의 다른 글

[JAVA] 객체지향 언어  (0) 2023.08.09
[JAVA] switch 문  (0) 2023.08.09
[JAVA] 상속  (0) 2023.08.08
[JAVA] 배열  (0) 2023.08.04
[JAVA] singleton 패턴  (0) 2023.08.03
반응형
객체 간의 상속은 어떤 의미일까?
상속?

기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다.

클래스 상속
  • 새로운 클래스를 정의할 때 이미 구현된 클래스를 상속(Inheritance)받아서 속성이나 기능을 확장하여 클래스를 구현함
  • 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야 할 때 기존 클래스를 상속함

  • 상속하는 클래스 : 상위 클래스, parent calss, super class
  • 상속받는 클래스 : 하위 클래스, child class, subclass
상속을 구현하는 경우
  • 상위 클래스는 하위 클래스 보다 더 일반적인 개념과 기능을 가짐
  • 하위 클래스는 상위 클래스 보다 더 구체적인 개념과 기능을 가짐
  • 하위 클래스가 상위 클래스의 속성과 기능을 확장(extends)한다는 의미

자바에서 상속을 구현하는 방법은 간단하다. 새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써 주면 된다.

예를 들어 새로 작성하려는 클래스의 이름이 C이고 상속받고자 하는 기존 클래스의 이름이 A라면 다음과 같이 하면 된다.

class A {   }
class C extends A { 
         // .....
}

이 두 클래스는 서로 상속 관계에 있다고 하며, 상속해주는 클래스를 '조상 클래스'라 하고 상속 받는 클래스를 '자손 클래스'라고 한다.

예를 들어 Parent 클래스에 age라는 정수형 변수를 멤버변수로 추가하면, 자손 클래스는 조상의 멤버를 모두 상속 받기 때문에 Child 클래스는 자동으로 age라는 멤버변수가 추가된 것과 같은 효과를 얻는다.

반대로 자손인 Child클래스에 새로운 멤버로 play( ) 메서드를 추가하면

Child클래스에 새로운 코드가 추가되어도 조상인 Parent클래스에는 아무런 영향도 받지 않는다.

조상클래스가 변경되면 자손 클래스는 자동적으로 영향을 받게되지만, 자손 클래스가 변경되는것은 조상 클래스에 아무런 영향을 주지 못한다.

자손 클래스는 조상 클래스의 모든 멤버를 상속받으므로 항상 조상 클래스보다 같거나 많은 멤버를 갖는다.

  • 자손 클래스는 조상클래스의 모든 멤버를 상속 받는다. (단, 생성자와 초기화 블럭은 상속되지 않는다.)
  • 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.
반응형

'Java > Java 이론' 카테고리의 다른 글

[JAVA] switch 문  (0) 2023.08.09
[JAVA] 상속 (2)  (0) 2023.08.08
[JAVA] 배열  (0) 2023.08.04
[JAVA] singleton 패턴  (0) 2023.08.03
[JAVA] static 변수  (0) 2023.08.03
반응형
배열(Array)이란?
연관된 데이터를 모아 통으로 관리하기 위해 사용하는 데이터 타입

앞에서 배웠던 변수는 하나의 데이터를 저장하기 위한 것이라면, 배열은 여러 개의 데이터를 하나의 변수에 저장하기 위한 것이라 볼 수 있다.

 

  • 동일한 자료형의 순차적 자료구조
  • 인덱스 연산자 [ ]를 이용하여 빠른 참조가 가능
  • 물리적 위치와 논리적 위치가 동일
  • 배열의 순서는 0부터 시작

배열의 선언 및 초기화

// 1. 선언과 초기화

int [] arr1; // 변수의 선언 (int가 아니라 int 배열이다.)

arr1 = new int[2]; // 배열의 초기화는 반드시 크기를 먼저 지정해주어야 사용가능하다.

// 배열의 크기도 생각을 해보자

double[] arr2 = new double[2]; // 선언과 동시에 초기화

 

// 값을 넣는 방법

arr1[0] = 100;

arr1[1] = 1000;

// 모든 인덱스의 순서는 0번부터 시작한다.

 

System.out.println(arr1[1]); // 두번째 값 출력

System.out.println(arr1[0]); // 첫번째 값 출력

 

// 주의 : 배열의 길이와(크기) 인덱스의 번호는 다르다.

// 공식 : 배열의 인덱스 번호는 n-1

// 오류코드 : System.out.println(arr1[2]); // 배열의 길이는 2이나 인덱스는 0, 1 까지만 존재하기 때문에 2는 존재하지 않는다.

 

arr2[0] = 10.0;

arr2[1] = 20.0;

arr2[0] = 0.0;

System.out.println(arr2[1]);

System.out.println(arr2[0]);

// 변수는 크게 몇가지가 존재한다고 하였나요?

// 기본 데이터 타입, 참조 타입

 

char[] ch1 = new char[10]; // 기본 데이터 타입(연관된 데이터) >> 기본데이터 타입에는 값이 바로 들어감

ch1[0] = 'H';

ch1[1] = 'E';

ch1[2] = 'L';

 

String[] strings = new String[5]; // 참조 타입 >> 참조타입은 값이 들어가는 것이 아니라 '주소값'이 들어간다.

strings[0] = "안녕 반가워";

strings[1] = "안녕 반가워";

strings[2] = "안녕 반가워";

 

반응형

'Java > Java 이론' 카테고리의 다른 글

[JAVA] 상속 (2)  (0) 2023.08.08
[JAVA] 상속  (0) 2023.08.08
[JAVA] singleton 패턴  (0) 2023.08.03
[JAVA] static 변수  (0) 2023.08.03
[JAVA] 객체 자신을 가리키는 'this'  (0) 2023.08.02
반응형
싱글톤 패턴

애플리케이션 전체에서 단 한 개의 객체만 생성해서 사용하고 싶다면 싱글톤 패턴을 적용할 수 있다.

싱글톤 패턴의 핵심은 생성자를 private 접근 제한해서 외부에서 new 연산자로 생성자를 호출할 수 없게 막는 것이다.

 

다음은 싱글톤 패턴의 전체 코드를 보여준다.

 

public class Singleton {

 

// private 접근 권한을 갖는 정적 필드 선언과 초기화

private static Singleton singleton = new Singleton();  ------------------------------------- (1)

 

// private 접근 권한을 갖는 생성자 선언

private Singleton() {

 

}

 

// public 접근 권한을 갖는 정적 메소드 선언

public static Singleton getInstance () {   -------------------------------------------------------(2)

return singleton;

}

 

}

(1)에서는 자신의 타입으로 정적 필드를 선언하고 미리 객체를 생성해서 초기화시킨다. 그리고 private 접근 제한자를 붙여 외부에서 정적 필드 값을 변경하지 못하도록 막는다.

(2)에서는 정적 필드값을 리턴하는 getInstrance() 정적 메소드를 public으로 선언하였다.

외부에서 객체를 얻는 유일한 방법은 getInstance() 메소드를 호출하는 것이다. getInstance() 메소드가 리턴하는 객체는

정적필드가 참조하는 참조하는 싱글톤 객체이다.

따라서 아래 코드에서 변수 1(obj1)과 변수 2(obj2)가 참조하는 객체는 동일한 객체가 된다.

Singleton obj1 = Singleton.getInstance();

Singleton obj2 = Singleton.getInstance();

obj1 과 obj2 는 싱글톤 객체를 참조한다

// 같은 주소값을 갖는지 확인

System.out.println(obj1);

System.out.println(obj2);

ex_06.Singleton@6f2b958e

ex_06.Singleton@6f2b958e

==== 같은 주소값임을 확인

[예제]

public class Company {

 

// 싱글톤 패턴으로 설계하는 방법

// heap 메모리에 오직 객체가 하나만 존재해야 될 경우 사용가능하다.

 

// 1. 생성자는 private으로 선언해야한다.

private Company() {}

 

// 2. 클래스 내부에 유일한 private 인스턴스를 객체를 생성

private static Company instance = new Company(); // 선언과 동시에 초기화

 

// 3. 외부에서 유일한 instance 변수에 접근할 수 있는 메서드를 제공해야한다.

public static Company getInstance() {

if(instance == null) {

instance = new Company();

}

return instance;

}

 

} // end of class

public class CompanyMainTest {

 

public static void main(String[] args) {

// 1.

// 생성자를 private로 선언했기 때문에

// 기본 생성자로 호출할 수 없다.

// Company company = new Company();

 

// 2.

// Company.instance -> 접근 제어 지시자가 private 이다.

 

// 3.

// 외부에서 유일하게 Company 객체 주소값에 접근할 수 있는 메서드

Company naver = Company.getInstance();

Company tenco = Company.getInstance();

System.out.println(naver);

System.out.println(tenco);

Company mata = Company.getInstance();

System.out.println(mata);

 

} // end of main

 

} // end of class

 

반응형

'Java > Java 이론' 카테고리의 다른 글

[JAVA] 상속  (0) 2023.08.08
[JAVA] 배열  (0) 2023.08.04
[JAVA] static 변수  (0) 2023.08.03
[JAVA] 객체 자신을 가리키는 'this'  (0) 2023.08.02
[JAVA] 접근제어지시자  (0) 2023.08.01
반응형
공통으로 사용하는 변수가 필요한 경우
  • 여러 인스턴스가 공유하는 기준 값이 필요한 경우
  • 학생마다 새로운 학번 생성
  • 카드회사에서 카드를 새로 발급할때마다 새로운 카드 번호를 부여
  • 회사에 사원이 입사할때 마다 새로운 사번 부여
  • 은행에서 대기표를 뽑을 경우 (2대 이상..)

static 변수는 공통적으로 사용하는 변수가 필요한 경우 사용한다.

static 변수 선언과 사용하기

필드와 메소드는 모두 정적(static) 멤버가 될 수 있다. 정적 필드와 정적 메소드로 선언하려면 static 키워드를 사용한다.

예를 들어 은행에서 사용하는 번호표를 출력하는 프로그램을 만든다고 생각해보자.

만약 두대 이상의 번호표 출력 프린트를 사용한다고 가정했을 때,

1번 프린터에서 번호표를 출력하고 2번 프린터에서 출력한다고 생각하면

번호가 차례대로 갱신이 되면서 출력이 되어야 한다.

 

[출력결과]

1 번 기기의 대기 순번은 : 1

1 번 기기의 대기 순번은 : 2

1 번 기기의 대기 순번은 : 3

1 번 기기의 대기 순번은 : 4

1 번 기기의 대기 순번은 : 5

1 번 기기의 대기 순번은 : 6

=======================

2 번 기기의 대기 순번은 : 7

2 번 기기의 대기 순번은 : 8

2 번 기기의 대기 순번은 : 9

2 번 기기의 대기 순번은 : 10

2 번 기기의 대기 순번은 : 11

2 번 기기의 대기 순번은 : 12

이처럼 대기순번을 공통적으로 공유하기 위해 static 변수를 사용하는 것을 알 수 있다.

즉, static 변수는 인스턴스에서 공통적으로 사용하는 영역임을 알 수 있다.

 

반응형

'Java > Java 이론' 카테고리의 다른 글

[JAVA] 배열  (0) 2023.08.04
[JAVA] singleton 패턴  (0) 2023.08.03
[JAVA] 객체 자신을 가리키는 'this'  (0) 2023.08.02
[JAVA] 접근제어지시자  (0) 2023.08.01
[JAVA] this 키워드  (0) 2023.08.01
반응형
this 가 하는 일
  • 인스턴스 자신의 메모리를 가리킴
  • 생성자에서 또 다른 생성자를 호출 할 때 사용
  • 자신의 주소(참조값)을 반환함

반응형

'Java > Java 이론' 카테고리의 다른 글

[JAVA] singleton 패턴  (0) 2023.08.03
[JAVA] static 변수  (0) 2023.08.03
[JAVA] 접근제어지시자  (0) 2023.08.01
[JAVA] this 키워드  (0) 2023.08.01
[JAVA] 참조 자료형 변수  (0) 2023.08.01
반응형

 

접근 제어 지시자(access modifier)

클래스 외부에서 클래스이 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드

  1. private : 같은 클래스 내부에서만 접근가능 (외부 클래스, 상속관계의 클래스에서도 접근 불가)
  2. default(아무것도 없음) : 같은 패키지 내부에서만 접근 가능 (상속 관계라도 패키지가 다르면 접근 불가)
  3. protected : 같은 패키지나 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근할 수 없음
  4. public : 클래스의 외부 어디서나 접근 할 수 있음

bank 클래스에서 balance라는 변수 앞에 private를 사용하면 maintest 클래스에서 balance의 변수를 사용하지 못한다.

getter/setter 메서드

객체의 필드(데이터)를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성(결점이 없는 성질)이 깨질 수 있다.

예를 들어 게임에서 공격력이 음수가 될 수 없는데 외부에서 음수로 변경할 경우 객체의 무결성이 깨진다.

이러한 문제점 때문에 객체 지향 프로그래밍에서는 직접적인 외부에서 필드 접근을 막고 대신 메소드를 통해 필드에 접근 하는 것을 선호한다. 이러한 역할을 하는 메소드가 Setter이다.

public void setPower(int power) {

// 방어적 코드를 작성한다.

if (power <= 0) {

System.out.println("잘못입력하였습니다.");

} else {

this.power = power;

}

 

}

power 매개값이 음수인 경우 잘못입력하였습니다 라는 메시지를 출력한다. 양수 입력인 경우 power에 값을 저장한다.

 

외부에서 객체의 필드를 읽을 때에도 메소드가 필요한 경우가 있다. 필드값이 객체 외부에서 사용하기에 부적절한 경우, 메소드로 적절한 값으로 변환해서 리턴할 수 있기 때문이다. 이러한 역할을 하는 메소드가 Getter이다.

private String name;

private int hp;

private int power;

private int level;

private double defense;

public int getPower() {

return power;

}

power 필드는 private 접근 제한을 가지므로 외부에서 읽지 못한다. power 필드를 읽기 위해서는 Getter 인 getPower() 메소드를 사용해야 한다.

정보은닉
private으로 제어한 멤버 변수도 public 메서드가 제공되면 접근 가능하지만 변수가 public으로 공개되었을 때보다
private일 때 각 변수에 대한 제한을 public 메서드에서 제어 할 수 있다.

객체지향프로그램에서 정보 은닉은 필요한 외부에서 접근 가능한 최소한의 정보를 오픈함으로써 객체의 오류를 방지하여 클라이언트 객체가 더 효율적으로 객체를 활용할 수 있도록 해준다.

반응형

'Java > Java 이론' 카테고리의 다른 글

[JAVA] static 변수  (0) 2023.08.03
[JAVA] 객체 자신을 가리키는 'this'  (0) 2023.08.02
[JAVA] this 키워드  (0) 2023.08.01
[JAVA] 참조 자료형 변수  (0) 2023.08.01
[JAVA] 생성자  (0) 2023.08.01
반응형
this 키워드

객체 내부에는 인스턴스 멤버에 접근하기 위해 this를 사용할 수 있습니다.

우리가 자신을 '나'라고 하듯이, 객체는 자신을 'this'라고 합니다. 생성자와 메소드의 매개변수명이 인스턴스 멤버인 필드명과 동일한 경우, 인스턴스 필드임을 강조하고자 할 때 this를 주로 사용합니다.

 

실행결과

 

포르쉐가 달립니다. (시속 : 100km/h)

벤츠가 달립니다. (시속 : 100km/h)

반응형

'Java > Java 이론' 카테고리의 다른 글

[JAVA] 객체 자신을 가리키는 'this'  (0) 2023.08.02
[JAVA] 접근제어지시자  (0) 2023.08.01
[JAVA] 참조 자료형 변수  (0) 2023.08.01
[JAVA] 생성자  (0) 2023.08.01
[JAVA] 배운내용정리 (2)  (0) 2023.07.29
반응형
변수의 자료형 기본 자료형 int, long, float, double 등 ...
참조 자료형 String, Date, Student 등 ...
  • 클래스형으로 변수를 선언
  • 기본자료형은 사용하는 메모리의 크기가 정해져 있지만, 참조 자료형은 클래스에 따라 다르다.
  • 참조 자료형을 사용할 때는 해당 변수에 대해 생성해야 한다. (String 클래스는 예외적으로 생성하지 않고 사용할 수 있음)

참조 자료형 정의하여 사용하기


  • 학생(Student)과 과목(Subject)에 대한 클래스를 분리하여 사용하고 Subject 클래스를 활용하여 수강한 과목들의 변수의 타입으로 선언

  • Subject.java

  • Student.java

  • StudentTest.java

반응형

'Java > Java 이론' 카테고리의 다른 글

[JAVA] 접근제어지시자  (0) 2023.08.01
[JAVA] this 키워드  (0) 2023.08.01
[JAVA] 생성자  (0) 2023.08.01
[JAVA] 배운내용정리 (2)  (0) 2023.07.29
[JAVA] 배운내용정리 (1)  (0) 2023.07.29
반응형
생성자(constructor)
  • 객체를 생성할 때 new 키워드와 함께 사용 // new Strudent( );
  • 생성자는 일반 함수처럼 기능을 호출하는 것이 아니고 객체를 생성하기 위해 new와 함께 호출된다.
  • 객체가 생성될 때 변수나 상수를 초기화 하거나 다른 초기화 기능을 수행하는 메서드를 호출함
  • 생성자는 반환 값이 없고, 클래스의 이름과 동일
  • 대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private으로 선언되는 경우도 있음
클래스 변수 = new 클래스 ( );

 

기본 생성자(deflault constructor)
  • 컴파일러가 제공해주는 기본 생성자외에 필요에 의해 생성자를 직접 구현할 수 있음
[public] 클래스 ( ) {   }

 

여러가지 생성자를 정의하는 생성자 오버로딩(overloading)

 

생성자 정의하기
  • 생성자를 구현해서 사용할 수 있다.
  • 클래스에 생성자를 따로 구현하면 기본 생성자 (default constructor)는 제공되지 않는다.
  • 생성자를 호출하는 코드(client 코드)에서 여러 생성자 중 필요에 따라 호출해서 사용할 수 있다.
클래스(매개변수, ... ) {
// 객체의 초기화 코드
}
반응형

'Java > Java 이론' 카테고리의 다른 글

[JAVA] this 키워드  (0) 2023.08.01
[JAVA] 참조 자료형 변수  (0) 2023.08.01
[JAVA] 배운내용정리 (2)  (0) 2023.07.29
[JAVA] 배운내용정리 (1)  (0) 2023.07.29
[JAVA] 인스턴스 생성과 힙 메모리  (0) 2023.07.28
반응형
연산자(Operator)
  • 어떠한 기능을 수행하는 기호(+, -, *, / 등)
피연산자(Operand)
  • 연산자의 작업 대상(변수, 상수, 리터럴, 수식)
연산자의 종류

연산자의 우선순위

  1. 괄호의 우선순위가 제일 높다.
  2. 산술 > 비교 > 논리 > 대입
  3. 단항 > 이항 > 삼항
  4. 연산자의 연산 진행방향은 왼쪽에서 오른쪽 방향 // 단, 단항, 대입 연산자만 오른쪽에서 왼쪽방향이다.

ex1 )   -x + 3        // 단항 > 이항

ex2 )    x + 3 * y   // 곱셈, 나눗셈 > 덧셈, 뺄셈

ex3 )    x + 3 > y - 2  // 산술 > 비교

ex4 )    x > 3  &&  x < 5    // 비교 > 논리

ex5 )    int result  =  x  +  y  *  3;   // 항상 대입은 맨 끝에

 

주의해야 할 몇 가지 사항

  1. <<, >>, >>> 는 덧셈연산자 보다 우선순위가 낮다.

ex 6) x << 2 + 1     x << (2 + 1) 과 같다.

  1. ||,  |(OR)는  &&, &(AND)보다 우선순위가 낮다.

ex 7) x < -1 || x > 3 && x < 5

         x < -1 || (x > 3 && x < 5)와 같다

 

증감연산자 ++, --

증감연산자(++) : 피연산자의 값을 1 증가시킨다.

감소연산자(--) : 피연산자의 값을 1 감소시킨다.

int i = 5;

int j = 0;

전위형 j = ++i; ++i;
j = i;
값이 참조되기 전에 증가시킨다.
후위형 j = i++; j = i;
i++;
값이 참조된 후에 증가시킨다.
부호연산자(+, -)와 논리부정연산자(!)

★ 부호연산자(+, -)

'+' 는 피연산자에 1을 곱하고, '-'는 피연산자에 -1을 곱한다.

★ 논리부정연산자(!)

true는 false로, false는 true)로 피연산자가 boolean 일 때만 사용가능하다.

 

반응형

'Java > Java 이론' 카테고리의 다른 글

[JAVA] 참조 자료형 변수  (0) 2023.08.01
[JAVA] 생성자  (0) 2023.08.01
[JAVA] 배운내용정리 (1)  (0) 2023.07.29
[JAVA] 인스턴스 생성과 힙 메모리  (0) 2023.07.28
[JAVA] 함수와 메서드  (0) 2023.07.28

+ Recent posts