자바 2주차 정리

선장원·2021년 10월 17일

자바

목록 보기
12/24

1주차 (7~10일차)

음 2주차는 뭔가 정리하기 어렵네

배열 / 메서드 / 객체지향 프로그래밍 /수업 중 꿀팁
으로 나눠서 해도 4일치에 복습을 많이해서 얼마 없겠넹

배열

기존 변수 : 변수 하나에 데이터(객체)를 하나 담는 구조

배열 : 배열 하나에 여러개의 데이터를 담을 수 있는 구조
단 같은 타입이여야함

인덱스가 존재하고 인덱스를 통해 해당 데이터에 접근할 수 있음
인덱스 번호는 0번부터 시작

단점
크기를 유동적으로 바꿀 수 없음.
배열 내부 데이터 추가, 삭제 등이 불편함.

배열 선언

int a[] = new int[5];  // 5는 크기5인 정수형 배열 a

int[] b = {1, 2, 3}; // 1, 2, 3의 데이터를 갖는 정수형 배열

String strVar[] ={“가나”, “다라”. “ab”, “cd”};

배열을 그림으로 설명하면 이런식으로 나온다.

배열 출력

System.out.println(num[0]);

System.out.println(strvar1[3]);

배열 데이터 바꾸기

num[1] = 99;

  • 배열의 1번 인덱스의 자리를 99로 바꾼다.

String strVar[1] = “바보”;

배열 크기 확인

배열에 몇 개의 데이터가 들어있는지 확인
.length
System.out.println(num.length);
num 배열의 데이터 크기 확인

변수로 지정해서 사용가능

int numSize = num.length;

주의 : 인덱스랑 크기랑 다르다.
인덱스는 0부터 시작
크기는 1부터 시작

배열 크기 정하기

int[] arr = new int[3];
arr배열의 크기는 3 인덱스는 0~2

배열 안의 기본값은 0으로 되어있다.

배열의 크기는 사용하기 전 언제든지 정할 수 있다
int[] num = null;
위에 배열을 만들어 두고

어디든지 가서 배열의 크기를 바꿀 수 있다.
num = new int[5];

배열 정리하기

방법 1 Arrays.sort();이용

import java.util.Arrays; 설치용

Arrays.sort(배열 이름);
을 사용하면 배열 안을 크기 순으로 정리해준다
배열의 0번 인덱스는 최솟값 끝 번호는 최댓값이다.

백준 알고리즘 하다가 알게 된 방법이다.

방법 2 변수활용 swap

변수를 활용해서 한 가지 데이터씩 옮기는 방식이다.

		// 정렬 알고리즘
		// 

		int[] num = { 3, 2, 1, 5, 4 };
		int temp = 0; // swap을 위한 중간 저장용

		for (int i = 0; i < num.length; i++) {
			for (int j = i+1; j < num.length; j++) {
				if (num[j] < num[i]) { // 비교
					temp = num[i];
					num[i] = num[j];
					num[j]=temp;

				}
			}
		}

		System.out.println(num[0]);
		System.out.println(num[1]);
		System.out.println(num[2]);
		System.out.println(num[3]);
		System.out.println(num[4]);
swap

중간저장을 해서 숫자를 교환할 수 있게 해주는 방법을 swap이라고 한다

메서드

이걸 메서드로 정리하는 것이 맞는 것일까...
일단 정리해보자 딱히 생각나는 단어가 없어

.equals()

스트링 클래스에서 같은 내용을 찾을 때 사용
크래스 타입에서 == 는 될 수도 있고 안 될 수도 있다.

기본형 변수 (primitive)

변수 자체에 값이 들어있다.

참조형 변수 (reference)

변수의 주소에 값이 들어있다.

String a = “종료”;
String b = “종료”;
참조형 변수에 같은 값(ex”종료”)을 넣어 주더라도 컴퓨터는 값을 보고 하는 것이 아니라 주소 값을 비교해서 사람이 생각한 값이랑 다르게 나온다

equals는 실제 주소에 들어 있는 값을 비교해주는 메서드

상수 선언

절대로 변하지 않는 값으로 사용

// 상수 선언 : 값이 절대로 바뀌지 않음
public static final String ANSWERC = "종료";

프로그램을 종료하는 키워드인 종료가 절대로 바뀌지 않을 경우

상수 선언은 모두 대문자로 하는건가?

특정 메서드 안에 소속 될 수 없고 클래스 안에 사용

final

상수 선언 말고 final 을 사용해서
final String end2 = "종료";

end2에 들어가는 마지막 값이 종료이다

final로 선언한 변수는 다시 대입을 할 수 없다

객체지향 프로그래밍

(Objebt Oriented Programming)

  1. 하나의 클래스에 모든 코드를 작성하는 절차지향 프로그래밍 단점 극복
  2. 기능들을 모두 분리해서 호출하여 쓰자
  3. 객체 클래스라는 것은 모든 데이터를 표현할 수 있다.
  4. main()메서드에서 다른클래스를 객체로 만들어 호출하여 사용

절차지향 프로그래밍

기존의 개발은 하나의 클래스에 모든 코드를 적는 방식
중복 코드, 같은기능 등으로 오류가 날 수도 있다

객체로 만들 클래스

  1. 필드 (속성)
  • 저장할 데이터를 담을 수 있는 공간
  1. 생성자 (constructor)
  • 객체를 만들 때 규칙
  • 생성자의 이름은 클래스 이름에 소괄호를 붙인 형태
    a. 생서자 오버로딩(Overloading)
    b. 기본생성자는 별도로 선언하지 않아도 사용이 가능하지만 다른 형태의 생성자를 선언을 하려면 기본 생성자를 먼저 선언을 해줘야 한다.
  1. 메서드(method)
  • 특정 기능을 수행하는 블록

필드


필드는 파란색 변수는 노란색

객체선언


객체선언을 해야 클래스에 있는 필드 내용을 가져다 쓸 수가 있다.

생성자

객체선언의 우변을 생성자라고 하고 비어있으면 기본생성자라고 한다.

변수 내용

변수의 내용을 설명으로 하자면 이런식으로 되는 것이다.

실제로는 변수 안에는 데이터 주소가 들어있고 데이터는 클래스에 들어있다
변수에 데이터주소가 있는 것을 Stack영역이라고하고
클래스에 변수 내용이 들어가는 것을 Heap영역이라고 한다

기본 생성자 생성


People 클래스에
People() {
System.out.println():
}
을 넣어두면 클래스 객체선언을 할 때 사용 된다.?

여러 개의 생성자를 선언 할 수 있지만 다른 생성자를 선언하기 이전에 기본 생성자를 먼저 선을 해줘야한다.
위치는 상관 없네

People 클래스는 수동적이라
main 메서드에서 객체를 호출 해줘야지 사용을 할 수 있다.
main 메서드는 단 하나만 있어야 한다.

매개 변수가 있는 생성자 선언

매개 값의 활용


System.out.println(p3.age); // 11
System.out.println(p3.name); // 이름3
System.out.println(p3.nation); // 스위스
매개 값 자리에 같은타입의 변수를 넣어도 활용 가능

생성자 오버로딩

생성자는 매개변수 타입, 개수 등을 다르게 하여 여러 개 선언이 가능함

매개 변수는 다양하게 활용이 가능하다.
안에 프린트 메서드를 넣어도 가능

매개 변수

this. : 현재 클래스의 필드를 가리킬 때 사용

없으면 no effect 오류가 난다.
아무런 효과가 없다

매개 변수의 타입의 위치, 숫자가 같으면 생성이 안된다

메서드

메서드 선언 문법

[리턴타입] 매서드 이름() {
메서드 실행내용
}

리턴 타입

  1. 리턴이 없다 : void
  2. 리턴이 있다 : 리턴하고자 하는 데이터 타입
  • 데이터의 타입은 기본형, 참조형 모두 올 수 있음

리턴 O

리턴 O

리턴 데이터 타입 메서드이름() {
실행내용;
return 리턴데이터; (필수)
}

클래스 안에

메인 메서드 클래스에서

리턴 X

리턴 X

void 메서드이름() {
실행내용;
}

수업 중 꿀팁

평균 값 구하기

  1. result / i;
  2. double avg = result / i;
  3. double avg1 = (double)result / i; // 평균을 구할 때 소수점까지 구하려고 하면

1번 처럼하면 소수점 이하는 구할 수 없음
2번 처럼하면 소수점은 나오지만 결과는 소수점을 버린상태에서 소수점이 생김
3번 처럼해야지 결과값을 소수점까지 구할 수 있음

2주차 정리 끝
4일치라서 얼마 안되긴하네
이제 점점 어려워 지기 시작하는구만
과제도 내주고 하려나....

profile
코딩도전기

0개의 댓글