onnnzeoz
article thumbnail

▶ 자료형의 최대값, 최소값이 기억이 안나고 찾아보기도 귀찮다면

자료형.MAX_VALUE

자료형.MIN_VALUE

을 기억하자

 

package와 class는 비슷한 메서드를 분류해주기 위해 있는 체계 혹은 분류

->클래스 이름 대충지으면 안됨, 안에 있는 메서드들을 대표하는 이름이어야함

->패키지를 3단계로 구분함 (메인메서드가 있는 메인클래스,?,?)

->클래스가 파일이라면 패키지는 폴더

-패키지는 이런 클래스들이 모여있는거야 라고 알려주는거다, 클래스를 구분하기 위해 있는게 패키지

 

▶ OOP의 특징 4가지: 남의 소스를 편리하게 사용하자!!!!!

1. 캡슐화(Encapsulation)
2. 상속(Inheritance)
3. 추상화(Abstractionism)
4. 다형성(Polymorphism)

캡추다상? ㅋㅋㅋ

 

Class 선언

자바 파일 하나에 클래스 1개가 요즘 원칙

class는 자료형이 될 수 있다

class에는 특수문자 들어갈 수 없다

class 안에 class를 선언할 수도 있다

class의 첫 글자는 대문자

class = 자바 파일명

 

▶ 클래스의 객체화 = 클래스의 인스턴스화

객체화하는건 원본 class를 복사했다는 것

class가 원본이라면 복사본은 instance 인스턴스라고 함

 

메모리가 3가지로 나뉨, t형 메모리구조

원래는 static에 클래스(원본들)를 쌓아놔

이걸 사용할 땐 ㄴ원본에서 복사해서 heap에 두고 사용함

여기서 ExSample은 데이터 타입이 되는거

데이터 타입은 뭐가 되냐면 객체화하려는 클래스 타입

sample은 복사된 객체를 담을 변수가 되는거

 

▶인터페이스

불을끌때 회로를 만지는게 아니라 스위치만 통해서 끌 수 있게 하는거

차를 멈출 때 바퀴가 아닌 브레이크를 밝으면 되는거, 스위치와 브레이크 모두 인터페이스

어려운 일을 쉽게할 수 있게 만들어놓은 장치

 

API ~이 방법대로 해봐 쉽게 될거야! 알려주는 도구나 방법

 

레퍼런스변수=매개변수=reference type

public class Calculator {
	//이용할 수만 있게 만들 메서드니까 메인 메서드 안넣음
	
	/**
	 * 이 메서드는 두 개의 정수를 넣으면 합하여 반환하는 메서드입니다.
	 * @param a 정수 형태의 값
	 * @param b정수 형태의 값
	 * @return a와 b를 더한 값
	 */
	//위에 쓴게 설명서! 저거 쓰면 API가 됨
	int plus (int a,int b){
		return a+b;
	}
}

▶ class의 member : 클래스 안에 있는 것들

constructor 생성자, field 변수, method 메서드

 

생성자없인 클래스를 사용할 수도 없어->너무 당연한 존재니까 생략해도 이해해줘

new로 복사할 때 반드시 생성자가 들어가(근데 코드로 쓰여있진 않아, 그냥 있다고 치는거야)

 

메인클래스에선 생성자 안 써

객체를 생성하는 건 메인메서드에서 하는 일

그렇게 생성된 객체를 실행 메서드에 복사함

객체화(복사)를 할 때 마다 생성자가 실행돼

왼쪽이 실행, 오른쪽이 메인

실행에는 

 

▶ 초기화 : 처음 시작할 때 하는 일, 최초의 값을 주는 것

복사 할때는 새로 만들어지는거니까(생성자덕분에) 초기화되는거임

 

자바에서 문자열끼리 비교하려면 equals 써야해요

String str1 = "JAVA";
		String str2 = new String("JAVA");
		
		System.out.println(v1 == v2);
		System.out.println(str1 == str2); //java에서는 문자열 이렇게 비교하면 x
		System.out.println(str1.equals(str2)); // 이렇게 해줘야 함

자바에서 switch문 사용하기

public class SwitchStmt {

	public static void main(String[] args) {

		String item ="식혜"; //식혜라는 값을 담은 변수 item 선언해주고
		
        // jdk1.6이하에서는 switch문 값이 숫자만 들어가야함
		switch (item) { //switch문 값에 그 변수를 넣어줍니다
		case "식혜": 	  //case 식혜라면
			System.out.println("식혜가 나왔습니다."); //이거 출력
			break; //그리고 끝내

		default: //디폴트값은(아니라면 여기까지 내려옴)
			System.out.println("해당 제품이 없습니다."); //해당 제품이 없다고 출력해
		}
	}

}

 unreachable code 해결법

 

원인 : 위 while문이 끝나지 않아서 여기까지 내려오지 않기 때문
해결방법 1:지운다
해결방법 2:위 반복문이 정지할 수 있는 조건 만들어준다

public class WhileStmt {

	public static void main(String[] args) {
		int i = 1;
		while (true) {
			i++;
			System.out.println("영원히 반복 된다.");
		}
		int cup = 1; //이렇게 되면 이 줄에 unreachable code라고 뜬다
	}
}

해결한 모습 (if문을 넣어 조건을 걸었다, break를 통해 while문을 빠져나와 int cup 까지 도달한다 -> 오류해결

public class WhileStmt {

	public static void main(String[] args) {
		int i = 1;
		while (true) {
			i++;
			System.out.println("영원히 반복 된다.");
			if(i<100) {
				break;
			}
		}
		
		//unreachable code라고 뜸, 왜냐? 위 while문이 끝나지 않아서 여기까지 내려오지 않기 때문
		//해결방법 1:지운다
		//해결방법 2:위 반복문이 정지할 수 있는 조건 만들어준다
		int cup = 1; 
	}

}

자바 배열

배열의 길이를 먼저 정해놓고 시작해야함 (자바스크립트와 다른 점)

자바 배열에 값 넣는 방법 3가지

//1. 선언과 동시에 값을 넣는다.
		int[] scores = {70,80,90}; // 이렇게도 되고
		String names[] = {"홍길동", "고길동", "박길동"}; //이렇게도 됨
		
		//2. new 연산자로 값을 추가하는 방법
		int[]numArr;
		numArr = new int[] {70,80,90};
		
		//3. 미리 크기를 지정하는 방법
		int[]arr=new int[6];

 자바 for문과 향상된 for문

int[]score = {95,75,84,35,88};
		
		//for문에서는 시작과 끝을 지정할 수 있다
		for (int i = 0; i < score.length; i++) {
			System.out.println(score[i]);
		}
		System.out.println("==========");
		
		//향상된 for문(시작하면 모든 내용을 꺼낸다)
		for(int s:score) {
			System.out.println(s);
		}

 

배열 인덱스에 하나씩 값 넣어보기

int[]scores = new int[10];
		System.out.println("크기 확인 : "+scores.length);
		
		//0번방에 100
		scores[0]=100;
		//1번방에 50
		scores[1]=50;
		//2번방에 70
		scores[2]=70;
		
		//3~9번 방까지 80씩 넣어보자
		for (int i =3; i < scores.length; i++) {
			scores[i] = 80;
			
		}

 

특정 인덱스 값만 제외하고 배열에 같은 값을 넣는 법

if문 사용해서 만약에 null 값이라면 "공실"이라는 값을 넣어준다

String[][][]apt = new String[4][4][3];
		System.out.println("층 : "+apt.length);
		System.out.println("호 : "+apt[0].length);
		System.out.println("방 : "+apt[0][0].length);
		
		apt[2][3][2]="철수의 방";
		apt[0][0][0]="영희의 방";
		
		for (int i = 0; i < apt.length; i++) {
			for (int j = 0; j < apt[i].length; j++) {
				for (int j2 = 0; j2 < apt[i][j].length; j2++) {
					
//					System.out.println(i +"층"+ j +"호"+ j2 +"방");
					
//					내가 만든 정답
//					apt[i][j][j2]="공실";
//					apt[0][0][0]="영희의 방";
					if(apt[i][j][j2] == null) {
						apt[i][j][j2] = "공실";
					}
					System.out.println(apt[i][j][j2]);
					
				}
			}

자바 2차 배열에 값넣을 때

int[]arr = { 

{...},

{...}

};

 자바 2차 배열에 배열의 크기부터 먼저 넣어주고 싶다면

String [][] arr = new String[4][4]

 

파스칼 표기법, 카멜 표기법

더보기

class : 파스칼 표기법, 첫 글자 대문자      Blackcolor

그 외 : 카멜 표기법, 첫글자 외에 의미를 갖는 단어를 대문자로 작성     blackColor

기본적으로 카멜을 쓰지만 class에만 파스칼을 쓴다, 꼭 클래스의 첫 글자는 대문자로

자바 외 다른 언어에서는 스네이크 표기법 : 의미를 갖는 단어 앞에 언더바 black_color

같은 값을 복사한 두 개의 인스턴스라고 해도 다르다고 봄.

왜냐 일련번호가 다르기 때문임

내 페이퍼를 복사해서 돌렸다고 가정해보면 걔네들이 다 똑같아 보일 순 있어도

복사본1에 낙서를 한다고 복사본2에도 그대로 낙서되는건 아니잖슴

equales로 알아보는 거는 얘네둘이 같아? 가 아닌 이 안에 들어있는게 같아? 임

Student std = new Student();
		Student std2 = new Student();
		//std와 std2에 담긴 객체(인스턴스)는 복사본이기 때문에 서로 다르다 (일련번호가 다름)
		//equals로는 얘네 둘이같아? 알아보는게 아니라 이 안에 들어있는 값이 같아? 인 거임

 

Calculator class에서 plus라는 메서드 생성함

이 클래스를 new 연산자를 통해서 인스턴스화시켰어 그래서 변수 calc에 넣었지

이 calc라는 클래스 안에있는 plus를 통해 매개변수 32와 1을 계산해서 출력해줌

 

 객체화를 할 때 생성자 호출은 무조건적임(너무 당연하니까 생략했어)

 

 

new연산자를 통해 생성할 때 애초에 값을 주고 시작할 수도 있음

그럴 땐 실행메서드에서도 이 값이 들어갈 데이터 형태+변수 가 매개변수를 추가해줘야함

 

오른쪽을 보면 systemout만 찍고 나면 복사한 name과 goal을 바로 잊어버려 그래서 이것들을 밖으로 빼낸거임

저게 바로 멤버구성원중에 하나인 변수! field가 됨

위에 선언했던 변수에 메인메서드에서 가져온 값("멍멍이","집지키기")을 넣어주려고

this.name=name; 을 해줘 여기서 이 this는 이 class를 의미해서 저 위에서 선언된 변수를 가르킴

이름을 바꿔줘도돼

profile

onnnzeoz

@onnnzeoz

비전공자의 개발 공부 일지입니다 💦 국비 풀스택 과정 수강중