[SeSACX코딩온] JAVA BASIC

JUHEE·2024년 5월 16일
0

SeSACX코딩온

목록 보기
23/26

JAVA START

  • 이전에 배울 때는 eclipse로 수업했는데 이번에는 intellij 환경에서 java를 공부하게 되었다.
  • 10일, 13일 2일동안 학습한 내용인데 워낙 기초적인 부분이 많아 간략하게 정리해보려고 한다

DataTypes

  • java의 데이터 타입은 기본형, 참조형으로 나눌 수 있다

Primitive

  • boolean, char, byte, short, int, long, float, double
  • float, double과 같은 실수형은 근사값을 사용하기 때문에 정확한 계산 결과가 나오지 않을 수 있다. 이 경우 BigDecimal을 활용해서 소수점 연산을 해야한다
  • float, long타입은 선언시 f, L을 붙여서 선언해야한다
long aaa = 3000L;
float bbb = 1.1f;

Reference

  • 기본형을 제외한 모든 타입은 참조형이다
  • 대표적으로 문자열 데이터를 저장하는 String이 있다
  • 배열, 클래스, 인터페이스에 대한 참조형 타입 변수를 사용할 수 있다

Casting

  • 묵시적 형변환: 작은 타입에서 큰 타입으로 형변환이 일어나는 것으로 "자동변환"되어 따로 작성할 내용이 없다
int smallNumber = 10;
System.out.println("small Number(int): " + smallNumber);
double bigNumber = smallNumber;
System.out.println("big Number(double): " + bigNumber);
  • 명시적 형변환: 큰 타입에서 작은 타입으로 "강제 변환"할 경우 대입할 값 앞에 (변환형)을 적어주어야 한다. 다만 크기가 작은 타입으로 변경하는 것이기 때문에 데이터 손실이 일어날 수 있음을 주의해야한다
int largeNumber = 1000;
// byte smallByte = largeNumber; 불가능
byte smallByte = (byte) largeNumber; // (변환형) 데이터 손실이 일어날 수 있음

조건문과 반복문

  • 조건문과 반복문은 이전 javascript의 내용과 거의 비슷하다.

IF

  • 기본형태
if (str3 == str4) {
	System.out.println("같은 주소값입니다.");
} else {
	System.out.println("다른 주소값입니다.");
}
  • 주의할 점: 참조형 변수를 비교할 경우 == 은 주소값을 비교하여 의도한대로 작동하지 않을 수 있다. .equals메소드를 사용해 내용만 비교할 수 있기 때문에 .equals를 사용하는 것이 바람직하다
  • equals 메소드 사용
 if (str3.equals(str4)) {
	System.out.println("내용이 같습니다.");
} else {
	System.out.println("내용이 다릅니다.");
}

SWITCH

  • 기본형태
int day = 1;
switch (day) {
	case 1:
		dayOfWeek = "일요일";
		break;
	case 2:
		dayOfWeek = "월요일";
		break;
	default:
		dayOfWeek = "잘못된 입력이에요";
		break;
}

FOR

  • 기본형태
for (int i = 1; i <= 10; i++) {
	System.out.println(i);
}

WHILE

  • 기본형태
while (i <= 10) {
	System.out.println(i);
	i++;
}
  • do-while문: 조건 검증 전에 일단 한 번 실행하고 조건을 검증한다. 최소 한번은 무조건 실행!
do {
	System.out.println(j);
	j++;
} while (j <= 10); // 나중에 조건검사

METHOD

  • java의 메소드는 기본적으로
    접근제한자 리턴타입 이름() { 실행문 }의 형태를 가진다
  • 리턴 타입이 없는 경우: void
  • 리턴 타입이 있는 경우: int, string 등 타입을 반드시 return 해야한다
  • static 키워드 적을경우 곧바로 접근가능 하지만 없을 경우 클래스 객체 생성 후 사용
  • 사용예시
// 반환값 있는 메소드
public static int sum(int x, int y) {
 함수의 리턴타입대로 리턴 필요
	return x + y;
}

//사용
System.out.println(sum(5, 10));

overloading

  • 메소드의 이름은 같지만 반환타입, 매개변수의 개수, 매개변수의 타입, 순서 등을 다르게 하여 같은 이름의 메소드를 여러가지 방식으로 선언하는 방법이다
  • 예를들어 같은 sum기능을 가진 함수라도 2개의 정수를 더하는 함수, 3개의 정수를 더하는 함수 2개의 실수를 더하는 함수 등 여러 기능을 할 때마다 다른 이름을 기억하지 않고, sum이라는 이름으로 매개변수를 넣어 호출할 때 알아서 해당 함수가 작동할 수 있도록 하기 위해 overloading을 사용하는 것이다.
  • 위의 sum 함수를 아래와 같이 overloading 할 수 있다.
// 반환값 있는 메소드
public static double sum(double x, double y) {
	// 함수의 리턴타입대로 리턴 필요
	return x + y;
}

ARRAY

Array

  • 배열: "같은 타입"의 여러 변수를 하나의 묶음으로 다루는 것, 선언한 배열의 크기는 변경할 수 없음(정적할당)
  • 선언방법
    1) int[] arr1; - 관례적으로 많이 사용
    2) int arr2[];
    3) int[] arr3 = new int[3];
  • 선언 당시 초기화: 개수 변경 불가
int[] intArray = {10, 22, 52, 91, 5};
  • 선언 이후 초기화
char[] charArray;
// charArray = {'A', 'a'}; compile error. 선언 시 초기화 안했을 때
charArray = new char[]{'A', 'a', '2', 66}; // new char[]를 붙여야 초기화 가능
// 66은 숫자가 아니고 ascii코드로 B임
  • new로 생성과 초기화: 기본값으로 초기화
double[] doubleArray = new double[3];
System.out.println(Arrays.toString(doubleArray)); //[0.0, 0.0, 0.0]
  • 배열 출력
    1) 인덱스로 접근
System.out.println("matrix2[i][j]: " + matrix2[i][j]);

2) 배열전체로 접근: 그냥 찍으면 주소값 출력함 Arrays import필요

System.out.println(Arrays.toString(doubleArray));

3) 배열 모두 출력시: for문 이용

for (int i = 0; i < matrix2.length; i++) {
	for (int j = 0; j < matrix2[i].length; j++) {
		System.out.println("matrix2[i][j]: " + matrix2[i][j]);
	}
}

4) for-each문 사용도 가능

int[] numbers = {1,2,3,4,5};
for(int number: numbers) {
	System.out.println("하나씩 출력: "+number);
}
  • Arrays 내장 메소드: ArrayEx.java참고
    -> copyOf(arr, lenght), copyOfRange(arr, startIndex, endIndex), fill(arr, fill), toString(arr), sort(arr)[오름차순], equals, deepEquals[이차원배열에 사용], binarySearch(arr, val)[인덱스 찾음]

ArrayList

  • 표준 배열보다 조금 느리지만, 배열에서 많은 조작이 필요할 때 유용하게 사용, 크기를 미리 정하지 않아도 되는 배열(동적할당)
  • 생성
List<Integer> numbers = new ArrayList<>();
System.out.println(numbers);
//array와 달리 바로 배열을 볼 수 있다
System.out.println("isEmpty? " + numbers.isEmpty());
  • 메소드
    -> add(요소추가), add(index, 요소추가), get(인덱스로 요소 접근), set(인덱스로 요소 수정), arr1.addAll(arr2)[list연결], indexOf(value), remove(index), size()[length사용 불가], clear()
  • 출력: for-each 사용가능
  • class타입도 ArrayList로 사용가능함
  • ex) Student class생성 후 여러명의 학생을 관리하는 Student 타입의 students ArrayList생성
List<Student> students = new ArrayList<Student>();
Student person = new Student("juhee", 24); // 인스턴스 생성
students.add(person);

class Student {
	//class 내용
}
profile
초보개발자

0개의 댓글