개발하는 삶

[Java] 조건문, 클래스, 메서드 본문

Java

[Java] 조건문, 클래스, 메서드

삶_ 2022. 6. 19. 09:35

 

자바 개발 환경 설정

  • 자바 SE 11 - window64
  • 이클립스 UTF-8 인코딩 설정(새로 설치할때마다 초기화 해주는게 좋음)
    • window - prefereces - encoding - General - content 어쩌구 - Text, java class file - default에 UTF-8 입력
    • workspace - text file encoding - other - UTF-8 입력

 

이스케이프 문자

  • 문자열 “” 에 들어가면 효과를 발휘함
  • \t 탭
  • \n 줄바꿈
  • \” \’ \\

 

이클립스 단축키

  • ctrl+ +.-  화면 폰트 확대/축소
  • ctrl+D  한줄삭제
  • ctrl+alt+↑↓  행단위 복사
  • alt + ↑↓  행단위 이동
  • ctrl + /   해당 줄 주석으로 만들기
    • // 행 주석
    • /* */ 여러줄 주석
  • ctrl+space  자동완성
  • ctrl+shift+o  자동으로 import문 만들기

 

 

비트 연산자

비트 이동 연산자

  • x<<y x의 비트를 y만큼 왼쪽으로 이동
  • x>>y x의 비트를 y만큼 오른쪽으로 이동
  • x>>>y x의 비트를 y만큼 오른쪽으로 이동

비트 논리 연산자

  • & : 두 비트 모두 1이면 결과 1
  • | : 두 비트 중 하나라도 1이면 결과 1
  • ^ : 두 비트중 하나는 1이고 나머지 0이면 결과 1
  • ~ : not 비트반전

 

 

 

기본형 / 참조형 타입

  • 기본형 타입
    • 스택 메모리에 저장
    • Null이 존재하지 않지만, 래퍼클래스를 통해 Null을 넣을 수는 있음
    • 문법이 틀리면 컴파일 오류가 남
    • 타입 변환(캐스팅) : 자료형을 호환되게 변경하는 방법
    • 타입 프로모션 : 작은 자료형(int) -> 큰 자료형(float) 으로 대입 할때
    • 종류
      • boolean(1)
      • byte(1), short(2), int(4), long(8)
      • float(4), double(8)
      • char(2)
  • 참조형 타입
    • 힙 메모리에 저장 : 주소값 저장
    • 기본형을 제외한 모든 타입
    • 빈 객체를 의미하는 Null 이 존재 -> NullPointException 에러
    • 배열, enum, 클래스, 인터페이스 등

 

 

타입 추론 var

  • Java 10 부터 가능
    • 자바 10 미만 : String a = "abc";
    • 자바 10 이후 : var a = "abc";
  • var
    • 컴파일러가 초기화한 값으로 타입을 유추함
    • 지역변수. 선언/초기화를 동시에 해야함

 

 

변수 스코프

  • 변수 스코프 : 변수를 사용할 수 있는 범위(스코프)
  • ex ) {} 안에 변수 선언 -> {} 안에서만 사용 가능
  • 지역변수
    • {} 내에 선언됨 (함수 안의 변수)
    • 메서드 내에서만 사용하는 메서드 내 변수
  • 전역변수
    • 클래스 속 인스턴스변수/클래스 변수
  • 클래스 변수 
    • 클래스 내의 static 으로 선언된 변수
    • 동일한 클래스 내 모든 객체들이 공유함
    • JVM 시작 후 프로그램 종료 시까지 유지됨

 

 

지시자 및

  • printf 에서만 쓸수있는것
    • %b %d %f %c %s
    • %n 줄바꿈
  • print 는 줄바꿈 없이 출력하는 것
  • char c = ‘’; ⇒ 에러. 문자는 빈 문자가 안됨.
    • String s = “” ⇒ 빈 문자열
    • char 은 '' 으로 나타내야함 ("" 안됨)
  • “” ⇒ 문자열 , ‘’ ⇒ 문자
    • 문자열은 어떤타입과 연산되도 문자열이 됨.
  • 숫자+’0’ = 문자,  문자 -‘0’ = 숫자
  • &&이 || 보다 우선순위로 계산됨
  • 변수에 초기화할때, 8/16진수
    • 8진수 : 02, -04 등 //0으로 시작하는 리터럴
    • 16진수 : 0x5, 0xA 등 //0x, 0X로 시작함. 영문과 같이 구성된 리터럴
    • 5E7 //5 x 10^7
    • 0.12E-5 //0.12 x 10^-5

 

Scanner

import java.util.Scanner; //import문 추가. Scanner클래스 만들기

public class scan {
	public static void main(String[] args) {
		
		Scanner scanner = new Scanner(System.in); //Scanner객체를 생성. 화면에서 입력받을 것
		
		int num = scanner.nextInt(); //Scanner객체를 사용.화면에서 입력받은 정수를 num에 저장
		int num2 = scanner.nextInt(); //이번엔 num2에 저장. 입력받을때 두개를 공백으로 구분
		System.out.println(num); 
		System.out.println(num2); 

		//String input = scanner.next(); //공백까지 포함한 문자열
		//String input = scanner.nextLine(); //엔터치기 전까지의 문자열

	}
}

 

 

연산 메서드

  • Math.round() 반올림 : 소수점 첫째자리에서 반올림함
    • Math.round(4.23)
  • Math.random() : 0.0 ≤ 값 <1.0 의 임의의 double 값
    • 각 변에 다른 숫자(ex. 2)를 곱해 int형으로 바꿈

 

조건문

  • 조건식 ? 참일때 : 거짓일때;
  • if - else if - else 문
  • switch {case 1 : default : 문}
    • switch (변수) { case 1 : 문 }
    • 경우의 수가 많을 때. case ‘’: ← 여기는 정수/상수/문자열만 가능
    • 강화된 switch문 ( -> 이용)
      • switch (input) {
           case 1, 2, 3 -> System.out.println("wow");
        }
  • Loop1: for문… ⇒ 이름붙은 반복문 만들기
    • break Loop1 = Loop1 이름붙은 반복문 빠져나오기
  • for문
    • for(int i=1; i<6; i++){}
    • for(;;)   //무한루프
    • for (타입변수명(배열의 모든요소를 대입함): 배열) {반복할문장}
    • label: for(조건식) {...}  //for문에 라벨 부여하기 // break label; : label문 종료하기
  • while (조건식) {}
  • do {} while (조건식) ;

 

배열

  • int[] score = new int[5];
    • int score[] = new int[5];
    • int[] score = new int[] {1,2,3,4,5}
    • score.length = 5
  • 배열 복사
    • System.arraycopy()
      • System.arraycopy(nun, 0, num, 0, nun.length);
      • nun[0]부터 배열 끝까지 기준으로, num[0]에게 nun.length개의 데이터를 복사
    • Arrays.copyOf()
      • Arrays.copyOf(a, 4) : a[3]까지 복사. 칸 남으면 0으로 채워짐
    • Arrays.copyOfRange(a, 1, 7) : a[1]~a[6]까지 범위복사
  • 배열 출력
    • import java.util.Arrays 혹은 import java.util.* 작성함
    • Arrays.toString(score) = [1,2,3,4,5]
    • Arrays.deepToString : 2차원배열
  • 배열 비교
    • Arrays.equals(a,b)
    • Arrays.deepequals(a,b) : 2차원배열
  • String 배열
    • String[] name =new String[] {”aa”,”dd”,”ccc”};
    • 문자열을 담은 배열
  • 2차원 배열
    • int[][] ss = {{10,20,20},{20,30,30}};
  • 배열 정렬
    • Arrays.sort(a);

 

 

String클래스

  • 내용 변경이 불가능(읽기전용)
  • 문자열로 반환하고싶을때 String 클래스를 정의함
  • char 배열이 불편해서 만들어진 문자열로 이루어진 클래스
    • String str = “ABCDE”;
    • str.charAt(3) : str[3] 위치의 문자를 반환
    • str.length() : 문자열 길이를 반환
    • str.substring(0,4) : str[0]~str[3] 까지 문자열을 반환
    • str.equals(str2) : 문자열의 내용이 같은지 확인 //문자열을 비교할땐 꼭 이걸 써야함!
      • !str.equals(str2) : 문자열 내용이 같지 않다
    • str.toCharArray() : 문자열을 char[]로 변환해서 반환

 

클래스

  • public class의 "이름" = "소스파일명" (ex. Hello2.java) 오직 하나만!
  • 클래스와 객체 생성
    • class Tv {…메서드 등등};
    • Tv t = new Tv();
  • 객체 배열
    • 배열 생성, 초기화를 꼭 해주어야함! (생성만 하면 객체는 생성되지않음) 
    • Tv[] tv = new Tv(3);  //배열 생성
    • tv[0] = new Tv() .... //배열 초기화 (수가 적을때)
    • Tv[] tv = {new Tv(), ...}  //배열 초기화 (수가 적을때)
    • for(int i=0; i<tv.length; i++) { tv[i]=new Tv();}  //배열 객체 각각 초기화 (수가 많을때)

 

Vector 클래스

  • 객체를 저장하는 배열 느낌이라 보면 됨
  • 메서드
    • Vector() : 10개의 객체를 저장할 수 있는 Vector 생성. 10개 이상으로 추가되면 자동으로 늘어남
    • add(Object o) : Vector에 객체 저장
    • remove(Object o) : Vector에 저장되어 있는 객체를 제거
    • isEmpty() : Vector가 비어있는지 검사
    • get(int index) : 지정된 위치의 객체를 반환
    • size() : Vector에 저장된 객체의 개수를 반환

 

초기화 블럭

  • 클래스 필드의 초기화만을 담당하는 중괄호({})로 둘러싸인 블록
  • 인스턴스 초기화 블록
    • 중괄호({})만을 사용하여 정의
    • 인스턴스가 생성될 때마다 실행
    • 잘 쓰이진 않음 (생성자와 차이 없어서)
    • 많은 생성자가 공통으로 수행해야될 코드가 있다면 사용함
  • 클래스 초기화 블록
    • 인스턴스 초기화 블록에 static 키워드를 추가
    • 단 한번만 실행
    • 복잡한 초기화를 해야 할 경우 유용하게 사용
  • 순서
    • 클래스 초기화 블록 > 메인메서드 > 인스턴스 초기화 블록 > 생성자
    • 클래스 변수 : 기본값 → 명시적 초기화 → 클래스 초기화 블록
    • 인스턴스 변수 : 기본값 → 명시적 초기화 → 인스턴스 초기화 블록 → 생성자

 

 

메서드

  • 다른 객체와의 데이터 전달수단.
  • 반환타입 메서드이름 (매개변수){}
    • int add (int x, int y) { return x + y;}
    • 매개변수의 갯수를 모를경우 (배열 이용)
      • int sum(int[] values){...배열 요소들을 합하는 식...}
      • int sum(int ... values){...동일...}
        • ... 을 써서 값을 몇개인진 모르지만 많이 나열할 것이다! 를 알림.(리스트 나열)
  • return;  메서드 실행 종료
  • 반환타입 ← 반환값(return)이 없으면 void를 붙이면 됨
    • 반환 값이 있을때는 변수에 대입해주면 됨 (변수 = 해당메서드 호출)
  • 외부에서 호출할때: 객체 생성 -> 참조변수로 메서드 호출
  • final 메서드는 오버라이딩을 할 수 없음
  • 재귀호출 (메서드 내부에서 자신의 메서드를 한번 더 불러옴)
    • 팩토리얼 공식
    static int factorial(int n) {
    		int result=0;
    
    		if(n==1)
    			result = 1;
    		else
    			result = n * factorial(n-1); //재귀호출
    
    		return result;
    	}
    }
  • 참조형/기본형 매개변수
    • 메서드의 매개변수를 int a 이런식으로 자료형 a = 기본형 매개변수
    • Data d 이런식으로 아예 참조형을 해주면 = 참조형 매개변수
  • 클래스(static) 메서드
    • 객체생성 없이 클래스.메서드() 로 호출 가능
    • 인스턴스 변수/메서드 호출 불가능
  • 인스턴스 메서드
    • 객체생성 해야함. 참조변수.메서드() 로 호출함
    • 인스턴스 변수/메서드 사용 가능

 

오버로딩

  • 이름이 같은 메서드 정의
    • 매개변수의 타입, 갯수 중 하나가 달라야 함
    • 반환타입은 달라도 됨

 

오버라이딩

  • 상속받은 조상의 메서드를 변경함 (선언부는 같게)
    • class child extends parent {…}

 

생성자

  • 인스턴스가 생성될 때마다 호출되는 인스턴스(객체) 초기화 메서드
  • 리턴타입 X. 클래스 이름과 동일함
  • 클래스 이름과 같아야함 (기본 생성자 무조건 있어야함!)
    • 클래스에 public 이 붙으면 기본생성자에도 public이 붙음
    • Car myCar = new Car() 할때 Car() 이 기본생성자임
      • 객체를 생성해주는 역할
  • final 멤버 변수 초기화
    • 인스턴스 변수의 경우, 생성자 안에서 초기화 할 수 있음
    • 생성자의 매개변수로 제공받아 필드의 final 상수를 한번만 초기화 할 수 있음
  • this()
    • 같은 클래스 내 다른 생성자 호출
    • Car(){this(2,”yellow”)} → Car(int i, String s){} 생성자를 호출한것임
    • 참조변수 this : 인스턴스 자신을 가리키는 참조변수
    • 인스턴스 메서드 내에서만 사용 가능
  • 싱글톤
    • 단 하나의 객체만 만들도록 설정하는 것
  • super()
    • 조상의 생성자 호출
    • 생성자의 첫줄에 다른 생성자를 호출하지 않으면
    • super();
      • 자손 클래스의 첫줄이 기본 생성자(조상의것 or 자손의것)를 호출하는 문장이 아닐 시,
      • 컴파일러가 조상의 기본 생성자를 호출하는 코드를 넣음
    • 참조변수 super : 조상의 멤버랑 자손의 멤버와 구별할 때 사용
    • 인스턴스 메서드 내에서만 사용 가능
//싱글톤

public class 클래스이름 {
	//클래스 내부에서 생성자 호출 가능. private static을 붙여 외부에서 필드값 변경 못하게함.
	private static 클래스이름 singeleton = new 클래스이름();
    
    //생성자. private를 붙여 하나의 객체만 생성 가능하도록 함
    private 클래스이름() {};
    
    //외부에서 호출 가능한 메서드. 오직 하나의 같은 객체를 호출하는법
    static 클래스이름 getInstance() {
    	return singleton; //하나뿐의 객체를 반환해줌 
    }
}

 

'Java' 카테고리의 다른 글

[Java] 제네릭스  (0) 2022.06.25
[Java] 예외, 래퍼 클래스  (0) 2022.06.25
[Java] 스레드  (0) 2022.06.21
[Java] Object, String 클래스  (0) 2022.06.21
[Java] 상속, 인터페이스  (0) 2022.06.19