본문 바로가기
공부하기!/JAVA

[JAVA] if문과 객체

by 갈매기^0^ 2022. 10. 14.

if문

if(true or false){

조건 true 시 실행되는 영역

}

else if(){

if문의 조건이 아니면서 else if 문의 조건이 true일때 실행됨

}

else{

위의 조건들이 모두 false일때 실행됨

}

→ if 문과 else 절에 속한 문장이 하나일 경우 중괄호가 생략이 가능하다.

switch문

스위치 문의 기본은 걸리면 브레이크까지 실행한다. defalut 문은 아무 조건에 걸리지 않을 때 실행한다.


import java.util.Scanner;

public class 가위바위보게임 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("가위(0), 바위(1), 보(2): ");
        int user = sc.nextInt();

        int computer = (int) (Math.random() * 3);

        if (user == computer)
            System.out.println("인간과 컴퓨터가 비겼음");
        else if (user == (computer + 1) % 3) // 0은 1한테 지고 1은 2한테, 2는 0한테 진다.
            System.out.println("인간: " + user + " 컴퓨터: " + computer + "   인간 승리");
        else
            System.out.println("인간: " + user + " 컴퓨터: " + computer + "   컴퓨터 승리");

    }

}

객체

절차 지향 언어

메소드와 변수만 존재해 사용함.

객체 지향 언어

절차 지향 언어에서 없던 점을 보완해 만든 언어.

  • 캡슐화
  • 상속
  • 추상화
  • 정보은닉

클래스란?

  1. 설계도
  2. 데이터 + 함수
  3. 사용자 정의 타입

클래스 정의 후 객체 생성

  1. 클래스 정의
  2. 참조 변수 선언
  3. 객체 생성
  4. 객체의 필드 선언
  5. 객체 메소드 접근
  • 무조건 메인 메소드 먼저 실행한다.
  • 클래스명은 참조형

ㄴ 영역

  • 클래스 영역 - 선언문(변수, 메소드)만 가능하다! 연산, 함수 사용 불가!
  • 메서드 영역

그럼 객체 생성시 참조형을 선언할 때 얼마나 차지 할까?

참조형은 4byte, 주소값을 참조해 생성한다.

객체 생성시 힙 메모리에 올린다.

obj = new Circle()← 함수!

함수 또한 4byte

class Circle{
int radius // 4byte
String color // 4byte
double calcArea(){} // 4byte
}

총 12byte의 객체를 생성한다! 

즉,객체! → 객체(인스턴스)란 .class 를 메모리로 올린것

ex) Car car = new Car()

  • Car = 자료형
  • car = 객체변수 → 참조값을 저장한다 (c언어의 포인터 개념)
  • new = 메모리 할당 , 인스턴스 생성 ,참조값을 리턱한다
  • Car() = 생성자(함수)를 호출한다.

즉, Car car 에 1000(예시)번지에 생성한 new Car()의 2000번지 메모리 주소(4byte)가 저장된다.

그 후 메인에서 calcArea함수를 호출하면, 2000번지의 calcArea를 호출한다.

String 객체

ex) String str = "Happy";

str은 메모리에 Happy의 주소값이 저장된다.

ㄴ 😃추가로 찾기

  • String 은 각 문자를 char 배열 형태로서 저장한다.
  • String 으로 리터럴 방식으로 값을 지정할 경우 같은 문자의 경우 같은경우 같은 메모리주소를 가진다.
  • new String 형태로 생성했을 경우 다른 메모리주소를 가져 == 연산을 진행했을 때 false를 리턴한다.
  • 자바 1.5 버전 이후 StringBuffer와 StringBuilder 를 사용하여 문자열에 문자열을 더할 때 append함수를 사용하면 본래의 메모리주소를 동일하게 가지는 새 문자열을 가질 수 있다. ex) 1000번지 Happy에 Day를 append함수로 붙이면 1000번지에 HappyDay를 가지게된다.
  • concat 함수를 이용해 붙이게 되면 Happy, Day 와 다른 메모리주소를 가지는 HappyDay를 가진다.
  • 리터럴 방식과 객체방식으로 동일한 문자열을 생성했을 경우 == 연산으로 비교하면 false를 출력하기 때문에equals()함수를 통해 비교해야 한다.

Class 생성 규칙

  1. 카멜 케이스를 기본으로 한다.
  2. class생성시 앞글자는 대문자