[220922] 클래스

최수정·2022년 9월 25일
0

멋쟁이사자처럼

목록 보기
2/14
post-thumbnail

(1) if

if 문

  • 중괄호에 속한 문장이 하나일 경우 중괄호 생략 가능
if(true or false) {
	조건이 true 시 실행되는 영역
}

if-else 문

if(true or false) {
	조건이 true 시 실행되는 영역
} else {
	조건이 false 시 실행되는 영역
}
// if else를 여러번 사용할 때 
if(true or false) {
	조건이 true 시 실행되는 영역
} else if (true or false) {
	前조건들이 모두 false & 現조건이 true 시 실행되는 영역
} else {
	모두 false 시 실행되는 영역
}

(2) switch

기초 : 걸리면 break까지 !

  • 스위치 조건에는 기본적으로 정수가 옵니다.
  • if문과 다르게 조건식에 부등식( <, <=, ==, =>, > 등)이 올 수 없다.
  • 비교 변수가 어떤 값을 가지냐에 따라 실행문을 선택한다.
  • 예시)
    : default는 동일한 값의 case가 존재하지 않을 경우 실행되며, 생략이 가능합니다.
switch(변수){
    case 값1 :
        실행문;
        break;
    case 값2 :
        실행문;
        break;
    default :
        실행문;
	    	break;
}
  • switch문은 break;를 사용할 때와 사용하지 않을 때의 결과값이 달라진다. 그러므로 위치를 잘 확인하여 넣어주어야 한다.

응용

  1. 조건이 다수인 경우
	public static void main(String[] args) {

		switch(num) {

			case 12 : case 1 : case 2 :
				System.out.println("겨울");
				break;

			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 :
				System.out.println("다시 입력해주세요");
				break;

		}

}

(3) 객체 지향 프로그래밍

  • 객체는 나이, 몸무게와 같은 속성(property)와 자다, 울다, 먹다와같은 행위(method)를 가진다
  • 절차지향 프로그램은 전체가 유기적으로 연결되있어서 프로그램의 실행속도가 빠르지만 유지보수가 어렵고 순서를 바꾸지 못하기때문에 비효율적이었다
    하지만 객체지향이라는 개념이 등장하며 프로그램을 각각의 사물로 생각하여 하나로 이어진 것이 아닌 서로서로 상호작용이 가능하게 만든다.

(4) 클래스

  • 자바에서 클래스는 객체를 정의하는 틀, 설계도이다
  • 예시: 아이폰14라는 객체가 있다 이 아이폰14라는 객체는 스마트폰이라는 안에 존재한다.
    클래스 : 객체 == 스마트폰 : 아이폰14
    이 스마트폰이라는 클래스 안에서 다른 객체인 갤럭시s20, 아이폰12 등등 수많은 객체를 만들 수 있다.

클래스의 정의

public class Circle {
접근지정자 클래스선언 클래스이름
	
	필드
	int radius;
	String color;

	메소드
	double calrArea() {
		return 3.14 * radius * radius;
	}
}

객체(인스턴스) 생성

Circle cir = new Circle();
클래스자료형 객체참조변수 = new연산자 클래스();
  • 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화 라고 한다
  • new연산자
    자바는 객체를 생성할때 new연산자를 통해 Heap영역에 데이터를 저장할 공간을 할당받고 객체에게 반환하여준 다음 생성자 클래스()를 호출하게된다.

객체생성시 Heap구조

먼저 자바의 메모리 구조에 대해 간단하게 알아보면

자바는 Static, Stack, Heap으로 이루어져있다

  • Static

가장 바깥부분(필드)부분에 선언된 변수(전역변수)나 정정(static이 붙은) 변수, 클래스가 이 필드에 속한다

  • Stack

기본 자료형(int, double, boolean등)과 지역변수, 메서드 등이 이 필드에 속한다

  • Heap

간단하게 실제 메모리의 영역이다

객체타입의 데이터가 저장된다(String, Intege 등), 배열

실제 데이터를 가지고있는 Heap영역의 참조 값을 Stack영역이 가지고있다

이 참조값을 얻기위해 new연산자는 인스턴스를 생성해 Heap에 배치한 다음 참조값을 Stack에서 받아온다

위처럼 메모리의 구조가 있다

여기서 ‘스마트폰’이라는 클래스를 만들고 그 안에 ‘아이폰14’라는 객체를 만들어보자

이 아이폰14라는 객체를 만들기 위해 클래스에 기본적으로 프로퍼티와 메서드를 넣었다

class smartPhone {
	public String color;
	public int space;

	public void sound() {
		System.out.println("띵동");
	}
}

public class Phone {
	public static void main(String[] args){
		smartPhone iphone14 = new smartPhone();

		iphone14.color = "mid night";
		iphone14.space = 128;
	
		iphone14.sound();
	}
}

이렇게 코드를 작성하고실행을 해보자

main인 Phone클래스와 smamrtPhone클래스가 스태틱영역에 들어갔다

smartPhone iphone14 = new smartPhone();에서

smartPhone iphone14가 실행되어 smartPhone객체에 대하나 참조변수 iphone14를 만들었다

이제 new smartPhone()이 실행되어 인스턴스를 하나 만들어서 Heap에 배치한다

그 다음 객체 참조 변수 iphone14를 통해 작성한 값들을 대입한다

iphone14.color = “mid night”;

이렇게 객체 참조 변수 iphone14를 이용해 실제 Heap객체에 접근해 데이터를 할당하고있다

그렇게 데이터를 다 할당이 다 끝나면 마지막줄이 실행된다

iphone14.sound();

메서드가 실행되어 콜솔에 “띵동”이 출력되게 되고

참조가 끝난 Heap에 smartPhone객체는 갈비지컬렉터(GC)에 의해 사라지게 된다

0개의 댓글