본문 바로가기

수업내용

[Day3][Java] 생성자 / 형변환 / 연산자

Ⅰ. 생성자

-- 생성자(==constructor)란?

객체를 생성(인스턴스화)할 때마다 자동적으로 호출되어져 실행되어지는 어떠한 행위를 기술한 것이라고 생각하면 된다.

▶▶ 생성자(==constructor)의 지켜야 할 규칙

1) 생성자(==constructor)의 이름은 반드시 클래스명과 같아야 한다.

2) 생성자(==constructor)는 반환타입(리턴타입)을 기술하면 안 된다.

-- java에서 괄호를 사용하는 것은 (1) 생성자와 (2) 메소드 뿐이다.

-- 생성자는 클래스명과 똑같이 써야 하고, 메소드는 다르게 쓸 수 있다.

▷ 파라미터(매개변수)가 있는 생성자 만들기

-- 괄호 속에 들어오는 변수를 파라미터(매개변수)라고 부른다.

 

 

 

public class Member {

	String userid;
	String passwd;
	String name;
	
	int age;
	int point;

	public Member(String userid, String passwd, String name) {
		this.userid = userid;
		this.passwd = passwd;
		this.name = name;
	}

    public Member() {
		// 기본생성자
	}
}

 

 

 

-- 파라미터(==매개변수)가 있는 생성자가 존재하는 순간 기본생성자는 자동적으로 제거가 되어진다.

-- 그러므로 파라미터(==매개변수)가 있는 생성자를 만들면 기본 생성자를 꼭 만들어 주어야 한다.

 

 

▶▶

 

 

 

this.userid = userid;
this.passwd = passwd;
this.name = name;

 

 

 

-- 지역변수이름과 인스턴스 변수이름  또는 static 변수이름이 같을 경우, 지역변수이름을 우선하므로 인스턴스 변수를 불러오기 위해서는 this를 사용한다.
-- this란 인스턴스를 가리키는 대명사이므로 즉, this가 인스턴스이다.

 


 

 

▷ 파라미터가 있고 리턴값이 없는 메소드 생성하기

-- void : 해당 메소드를 실행만 해 줄 뿐 리턴시켜 주는 값이 없음을 말한다.

 

 

 

void setAgePoint(int age, int point) { this.age = age; this.point = point; }

패키지, 클래스, 인스턴스 변수 모두 위와 동일

 

 

 

▷ 파라미터가 없고 리턴값이 있는 메소드 생성하기

 

 

 

String getMemberInfo() {
		String result = ">> 회원정보 << \n" +
						"1. USERID : " + userid + "\n" +
						"2. PASSWORD : " + passwd + "\n" +
						"3. NAME : " + name + "\n" +
						"4. AGE : " + age + "\n" +
						"5. POINT : " + point + "\n";		
		return result;
	}

패키지, 클래스, 인스턴스 변수 모두 위와 동일

 

 

 

▷ 파라미터가 있고 리턴값이 있는 메소드 생성하기

 

 

 

int setBonus(int num){
		point = point + (num*10);
		return point;
	}

패키지, 클래스, 인스턴스 변수 모두 위와 동일

 


Ⅱ. 형변환

1. 자동 형변환(묵시적 형변환)

 

-- 데이터타입의 크기가 작은 것에서 크기가 큰쪽으로는 자동적으로 형변환이 발생된다.

▷ byte(1byte) → short(2byte)  int(4byte)  long(8byte)

       개미               병아리         강아지           사람

      개미집            병아리집      강아지집          안방

-- 개미(1byte)는 병아리집(2byte)에 들어가기 쉽지만 강아지(4byte)는 병아리집에 들어가기 어렵다. (2byte)

-- 따라서 크기가 큰 것에서 작은 것으로 가려면 강제적으로 형변환을 해 주어야 한다.

-- float(4byte)  double(8byte)

 정수타입은 실수타입으로 자동형변환이 발생한다.

-- char(2byte)

 char타입은 int형으로 자동형변환이 발생한다.

 

2. 강제 형변환

 

-- 데이터타입의 크기가 큰 것을 작은 것으로 강제적으로 형변환 시키는 것을 말한다.

-- 크기가큰타입 = (크기가큰타입)크기가작은타입

▷ 정수 = (정수)실수

-- 실수를 정수로 강제적으로 형변환한다.

-- 소수부는 무조건 절삭을 해버리고 정수만 나온다.


 

 

 

int a = 5000;
short b = (short)a;
System.out.println("b => " +b);

 

 

 

▷ 결과

b => 5000

 

 

 

float ft = 1.234567F;
long ln = (long)ft;
System.out.println("ln => " + ln);

 

 

 

▷ 결과

ln => 1

 

 

 

double db = 93.567;
System.out.println((int)db);

 

 

 

▷ 결과

db => 93

 

 

 

 


 

Ⅲ. 연산자

1. 산술 연산자

-- +, -, *, /, %(나머지)

 

 

 

int n  = 10;
System.out.println("n+3=" + (n+3));
System.out.println("n-3=" + (n+3));
System.out.println("n*3=" + (n*3));
System.out.println("n/3=" + (n/3));	
System.out.println("n/3=" + ((double)n/3));
System.out.println("n%3=" + (n%3));

 

 

 

-- "/" 나누기를 할 때 정수를 정수로 나누면 몫(정수)가 나오고, 실수를 정수로 나누거나 정수를 실수로 나누면 실수가 나온다. 
-- "%" 이 표시는 10을 3으로 나누었을 때의 '나머지'를 나타낸다.

 

 

2. 증감 연산자

-- 후위증감연산자(a++, b--)는 다른 연산을 다 마친 이후에 1씩 증감한다.

-- 전위증감연산자(++a, --b)는 맨 먼저 1씩 증감을 마친 이후에 다른 연산을 한다.

 

 

 

int a = 7;
int b = 3;
		
a++; // a++; 은 a=a+1; 와 같다. 즉, a=7+1; 이다.
System.out.println("a=" + a);
		
b--; // b--; 은 b=b-1; 와 같다. 즉, b=3-1; 이다.
System.out.println("b=" + b);
		
++a; // ++a; 은 a=a+1; 와 같다. 즉, a=8+1; 이다.
System.out.println("a=" + a);
		
--b; // --b; 은 b=b-1; 와 같다. 즉, b=2-1; 이다.
System.out.println("b=" + b);

 

 

 

▷결과

a=8

b=2

a=9

b=1


 

 

 

int x=10, y=10;
		
int z=++x;
System.out.println("z => " + z);	// z => 11
System.out.println("x => " + x);	// x => 11
		
z=y++;
System.out.println("z => " + z);	// z => 10
System.out.println("y => " + y);	// y => 11

 

 

 

▷ 결과

z => 11

x => 11

z => 10

y => 11

 

 

3. 논리 연산자

-- &, |, &&, ||

▷ &, &&

수학에서는 T ∧ T ∧ F ==> F : 모든 게 참일 때 참(AND)

수학에서는 F ∧ T ∧ F ==> F : 처음부터 거짓이라면 뒤에 무엇이 오든 상관없이 무조건 거짓

수학에서는 T ∧ T ∧ T ==> T

▷ |, ||

수학에서는 T ∨ T ∨ T ==> T : 하나만 참이면 참(OR)

수학에서는 F ∨ T ∨ F ==> T : 처음부터 참이라면 뒤에 무엇이 오든 상관없이 무조건 참

수학에서는 F ∨ F ∨ F ==> F

 

 

int c=50, d=60, e=70;
boolean bool = (c>d) && (d<e) && (c==e);   // F && ==> 처음부터 거짓이므로 뒤에 보지 않아도 거짓
System.out.println("bool => " + bool);
		
bool = (c<d) && (d<=e) && (c==e);          // T && T && F ==> 거짓
System.out.println("bool => " + bool);
		
bool = (c<d) && (d<=e) && (c!=e);          // T && T && T ==> 참
System.out.println("bool => " + bool);

 

 

 

▷ 결과

bool => false

bool => false

bool => true

 

 

int c=50, d=60, e=70;

bool = (c>d) || (d<e) || (c==e);           // F || T  ==> 하나가 참이므로 참
System.out.println("bool => " + bool);

bool = (c<d) || (d<=e) || (c==e);          // T || F ==> 처음부터 참이므로 참
System.out.println("bool => " + bool);

bool = (c>d) || (d>e) || (c==e);           // F || F || F ==> 거짓
System.out.println("bool => " + bool);

 

 

 

▷ 결과

bool => true

bool => true

bool => false

-- &&, || 은 처음 하나가 거짓 또는 참이라면 뒤에는 고려하지 않는다.


 

 

 

bool = (c>d) & (d<e) & (c==e);      // 	 F&T&F
System.out.println("bool => " + bool);
		
bool = (c<d) & (d<=e) & (c==e);     //	 T&T&F
System.out.println("bool => " + bool);
		
bool = (c<d) & (d<=e) & (c!=e);     //   T&T&T
System.out.println("bool => " + bool);

 

 

 

▷ 결과

bool => false

bool => false

bool => true

 

 

bool = (c>d) | (d<e) | (c==e);    //  F|T|F
System.out.println("bool => " + bool);
		
bool = (c<d) | (d<=e) | (c==e);   //  T|T|F
System.out.println("bool => " + bool);
		
bool = (c>d) | (d>e) | (c==e);    //  F|F|F
System.out.println("bool => " + bool);

 

 

 

▷ 결과

bool => true

bool => true

bool => false

-- &, | 은 처음 하나가 거짓 또는 참이라도 계속하여 연산 과정을 거친다.


 

 

 

문제1 ▷▷

 

 

 

int i=1;		// i=>1
int j=i++;		// j=>1, i=>2
	if((i > ++j) & (i++ == j)) {
	// (2 > 2)   & (2 == 2)		j=>2, i=>3
	//	  F	& T
		i=i+j;
	}
	System.out.println("i="+i); // i=3
		
	i=1;		// i=>1
	j=i++;		// j=>1, i=>2
	
	if((i > ++j) && (i++ == j)) {
	// (2 > 2)   &&		스킵
		i=i+j;
	}
    System.out.println("i="+i); // i=2

 

 

 

▷ 결과

i=3

i=2

문제2 ▷▷

 

 

 

int m1=0, n1=1;
		if((m1++ == 0) | (n1++ == 2)) {
		//	(0==0)	T  | 	(1==1)  F 		m1=>1, n1=>2
			m1=42;
		}
		System.out.println("m1=>"+m1 + ", n1=>"+n1);	// m1=42, n1=2
		
		m1=0;
		n1=1;
		
		if((m1++ == 0) || (n1++ ==2)) {
		//	(0==0)	T  ||	스킵				m1=>1, n1=>1
			m1=42;
		}

 

 

 

▷ 결과

m1=>42, n1=>2

m1=>42, n1=>1

 


 

4. 비교연산자

-- !, =, >, <, >=, <=

-- 일반적으로 수학에서 쓰이는 것과 같다.

5. 할당연산자 (연산 후 대입 연산자)

int no = 1; no+=3; // no=no+3; no=1+3; System.out.println("no="+no); no-=2; // no=no-2; no=4-2; System.out.println("no="+no); no*=5; // no=no*5; no=2*5; System.out.println("no="+no); no/=4; // no=no/4; no=10/4; System.out.println("no="+no); no%=3; // no=no%3; no=2%3; System.out.println("no="+no);

▷ 결과

no=4

no=2

no=10

no=2

no=2

 

6. 삼항연산자

-- 변수선언 = (조건식)?값1:값2

-- 변수를 선언하고 나서 값을 부여하고자 할 때 사용되어지는데 조건식이 참일 경우 변수에 값1을 대입해 주고,

만약에 조건식이 거짓일 경우 변수에 값2를 대입해 준다.

int num1=50, num2=60; int num3=(num1 > num2)?num1:num2; System.out.println("num3="+num3);

▷ 결과

num3=60