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 + " 컴퓨터 승리");
}
}
객체
절차 지향 언어
메소드와 변수만 존재해 사용함.
객체 지향 언어
절차 지향 언어에서 없던 점을 보완해 만든 언어.
- 캡슐화
- 상속
- 추상화
- 정보은닉
클래스란?
- 설계도
- 데이터 + 함수
- 사용자 정의 타입
클래스 정의 후 객체 생성
- 클래스 정의
- 참조 변수 선언
- 객체 생성
- 객체의 필드 선언
- 객체 메소드 접근
- 무조건 메인 메소드 먼저 실행한다.
- 클래스명은 참조형
ㄴ 영역
- 클래스 영역 - 선언문(변수, 메소드)만 가능하다! 연산, 함수 사용 불가!
- 메서드 영역
그럼 객체 생성시 참조형을 선언할 때 얼마나 차지 할까?
참조형은 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 생성 규칙
- 카멜 케이스를 기본으로 한다.
- class생성시 앞글자는 대문자
'공부하기! > JAVA' 카테고리의 다른 글
Comparator VS Comparable (0) | 2024.01.02 |
---|---|
BufferedReader, BufferWriter 사용하기 + String 처리 (0) | 2022.11.30 |
나누기 계산하기 , 소수점 표현 (0) | 2022.11.30 |
[JAVA] 상수와 형변환, 반복문 (0) | 2022.10.14 |