728x90

상속 받은 조상 메소드를 자신에 맞게 변경하는 것

Object 클래스의 11가지 기본 메소드들도 수정가능

class Point {
    int x;
    int y;
    
    String getLocation() { // 조상으로부터 받아온 기존 메소드에서
        return "x :" + x + ", y :" + y;
    }
}

class Point3D extends Point {
    int z; // 자신에게만 있는 z값을 사용하기 위해

    String getLocation() { // 구현부는 변경불가 {}안의 구현부만 변경 가능
        return "x :" + x + ", y :" + y + ", z :" + z; // 상속 받은 메소드를 오버라이딩 함
    }
}

1. 선언부가 조상 클래스의 메서드와 일치해야 함

2. 접근 제어자를 조상 클래스의 메소드보다 좁은 범위로 변경할 수 없음

3. 예외는 조상 클래스 메소드보다 많이 선언할 수 없음

 

'Java > Notion' 카테고리의 다른 글

패키지 (package)  (0) 2023.04.24
super, super()  (0) 2023.04.24
상속과 포함  (0) 2023.04.24
Class / Method  (0) 2023.04.24
ArrayList  (0) 2023.04.23
728x90

상속

기존 클래스(부모)로 새로운 클래스(자식)를 작성하는 것 - 코드의 재사용

공통되는 속성이나 기능들을 반복적으로 작업할 필요가 없어짐

다형적 속성도 표현 가능

class 조상클래스 {
	String first_name = "홍"; //조상클래스로 받아옴
    String home = "ㅇㅇ시 ㅇㅇ동 ㅇㅇ아파트";
}
class 부모클래스 extends 조상클래스{
	String first_name = "홍"; //조상클래스로 받아옴
    String home = "ㅇㅇ시 ㅇㅇ동 ㅇㅇ아파트"; //부모클래스의 멤버
}
class 자손클래스 extends 부모클래스 {
	//부모 및 조상의 모든 멤버를 상속 받음 (생성자, 초기화블럭 제외)
    //자손의 멤버 개수는 조상과 같거나 많음
    //자손의 변경은 조상에 영향을 주지 않음
    
    String first_name = "홍"; //조상클래스로 받아옴
    String home = "ㅇㅇ시 ㅇㅇ동 ㅇㅇ아파트"; //부모클래스로부터 받아옴
    String name = "길동"; //자손클래스에만 존재하는 멤버
}

자바의 상속은 다중 상속을 허용하지 않음. 오로지 단일 상속만 가능

 

포함

클래스의 멤버로 참조변수를 선언하는 것

class Point { // 1.작은 단위의 클래스를 만들고
	int x;
    int y;
}
class Circle { // 2.작은 단위 클래스들을 조합해서 하나의 클래스를 만드는 것
	Point c = new Point(); // Circle이 Point를 포함한 관계
    int r;
}

 

상속 / 포함 관계 결정하기

상속관계 = A는 B이다 (A is B)

포함관계 = A는 B를 가지고 있다 (A has B) . 포함을 상속보다 자주 사용함

 

원은 점이다 / 원은 점을 가지고 있다 => 포함관계가 더 어울림

 

단일상속

자바는 단일상속만 허용하기 때문에

비중이 가장 높은 클래스 하나만 상속관계로 받고 나머지는 포함관계로 받음

 

Object 클래스

모든 클래스의 조상으로 부모가 없는 클래스는 컴파일러가 자동적으로 Object 클래스를 상속 받게함

모든 클래스는 Object 클래스에 정의된 11개의 메소드를 상속 받음

'Java > Notion' 카테고리의 다른 글

super, super()  (0) 2023.04.24
오버라이딩 (Overriding)  (0) 2023.04.24
Class / Method  (0) 2023.04.24
ArrayList  (0) 2023.04.23
Math  (0) 2023.04.23
728x90

소스파일의 이름은 파일 내 클래스명 중 하나와 일치해야하지만

public 클래스가 있는 경우에는 해당 클래스와 소스파일의 이름이 반드시 일치해야함

main 메소드는 소스파일의 이름과 일치하는 클래스에 만들어야 실행 됨

 

//클래스 선언
class 클래스명(첫글자는 대문자) { 내용 }

class Car {
	String name; // 인스턴스 변수
    static int tier = 4; // 클래스 변수
    
    void print_car() {
    	String color = "red"; // 지역 변수
        System.out.println(color);
    }
}

//클래스 사용
Car human = new Car();
human.print_car();
int x = Car.tier; // 클래스 변수 사용

//메소드
접근제어자 반환타입 메소드명(매개변수) {
	메소드 내용;
    return 값; // 반환타입이 void가 아니라 존재한다면 값을 무조건 리턴 해줘야 함
}

//메소드 사용
메소드명();

//생성자
class People {
	String name;
    String sex;
    int age;
    
    // 생성자 선언
    People() {
    	this(String name, String sex, int age); // this()
    }
    People(String name, String sex, int age) { // 생성자 오버로딩
    	this.name = name;
        this.sex = sex;
        this.age = age;
        System.out.println("이름은" + name + "이고, 성별은 " + sex + "이며, 나이는 " + age + "입니다");
    }
}

//생성자 사용
People human = new People();

 

클래스의 필드의 구성요소

멤버

변수, 메소드, 생성자

변수

인스턴스의 속성 정의

 

인스턴스 변수 : 클래스 내에서는 호출이 자유롭지만 클래스 외부에서는 객체를 생성하여 호출해야 함

클래스 변수 : static을 통해 정적멤버로 만들어진 클래스 변수는 클래스 외부에서도 클래스명.변수명을 통해 호출 가능

지역 변수 : 클래스 내의 메소드 안에서만 사용이 가능한 변수

인스턴스 변수와 클래스 변수의 차이점

인스턴스 변수는 객체의 속성 중 객체에 따라 달라지는 값들을 정의할 때 사용

클래스 변수는 객체의 속성 중 공통적으로 가지는 값들을 정의할 때 사용

 

추가로 인스턴스/클래스 변수는 자동으로 초기화되지만 지역변수는 직접 초기화를 해줘야 함

메소드

인스턴스의 기능 정의

생성자

객체를 생성하기 편하게 하기 위해 사용

static

필드 내의 멤버를 정적 멤버로 선언하기 위해 사용

인스턴스 생성 없이 클래스명.멤버명으로 사용 가능

this()

같은 클래스 내의 생성자를 호출. 생성자 오버로딩 시 사용. 생성자의 첫줄에서만 사용 가능

this

자기 자신을 가리키는 참조변수. 멤버변수(인스턴스/클래스 변수)와 지역변수(생성자 안에 서의 변수)가 동일한 이름을 가질 때 멤버변수를 참조하기 위해 사용하는 참조변수로 위의 코드에서 this.name은 클래스 내의 멤버변수 name을 가리키고 생성자 내의 name은 생성자가 매개변수로 전달 받은 name을 가리킴

메소드와 생성자의 오버로딩

같은 이름이지만 매개변수의 타입이 다르거나 개수가 다른 경우의 메소드나 생성자를 추가로 만드는 경우

전달 받는 매개변수의 타입이나 개수에 따라 다른 기능이 실행됨

메모리의 저장위치

정적 멤버는 클래스가 생성될 때 클래스 내의 내부 공간에 저장공간을 가짐

인스턴스 변수와 지역 변수는 힙 메모리에 독립적인 공간을 가짐

 

배열로 비유하면

int[] 클래스_변수 = new int[1];

int[] 인스턴스_지역_변수 = new int[값이 추가되면 계속 늘어남];

내부 클래스

class 외부클래스 {
	class 인스턴스내부클래스 {
    	//외부 클래스를 통해서만 호출 가능
        외부클래스.인스턴스내부클래스;
    }
    static class 정적내부클래스 {
    	//외부클래스를 통해 정적내부클래스의 객체를 생성할 수 있음
        외부클래스.정적내부클래스 객체명 = new 외부클래스.정적내부클래스();
    }
    void method() {
        class 지역내부클래스 {
			//메소드 내에서 선언 후에 바로 사용
            지역내부클래스 객체명 = new 지역내부클래스();
        }
    }
}

인스턴스 내부 클래스는 반드시 외부 클래스를 생성한 이후에 사용 가능하고, 정적 변수와 정적 메소드는 인스턴스 내부 클래스에서는 선언 불가능

 

'Java > Notion' 카테고리의 다른 글

오버라이딩 (Overriding)  (0) 2023.04.24
상속과 포함  (0) 2023.04.24
ArrayList  (0) 2023.04.23
Math  (0) 2023.04.23
String  (0) 2023.04.19
728x90

import java.util.ArrayList 선언해줘야함

ArrayList<타입> 배열명 = new ArrayList<타입>()

크기가 정해지지 않은 배열을 생성

add() / add(인덱스번호,요소)

리스트의 끝에 요소를 추가하거나 지정 인덱스에 요소를 추가

size()

ArrayList는 length가 아닌 size로 크기를 알 수 있음

get()

지정 인덱스의 요소를 반환함. 배열처럼 배열명[인덱스번호]로는 요소를 못가져옴

remove()

지정 인덱스의 요소를 삭제

clear()

리스트의 모든 요소 삭제

isEmpty()

리스트가 비어 있는지 여부를 확인

contains()

리스트에 객체가 있는지 여부를 확인

indexOf()

리스트에 객체가 처음으로 등장하는 인덱스 반환

lastIndexOf()

리스트에 객체가 마지막으로 등장하는 인덱스 반환

toArray(new 타입[크기])

리스트를 배열로 변환. 크기를 지정하지 않을 시 리스트만큼의 길이를 가진 새로운 배열 생성

'Java > Notion' 카테고리의 다른 글

상속과 포함  (0) 2023.04.24
Class / Method  (0) 2023.04.24
Math  (0) 2023.04.23
String  (0) 2023.04.19
배열  (0) 2023.04.19
728x90

 

sqrt()

주어진 값의 제곱근을 반환

abs()

절댓값을 반환

round()

소수점 아래 첫번째 자리에서의 반올림 결과를 반환하기 때문에 필요한 위치에서 반올림 하고 싶다면

값을 곱한 후 반올림 후에 다시 곱한만큼 나눠줌

ceil()

올림. 주어진 값보다 큰 수 중 가장 작은 정수를 반환

예) 10.1을 올림하면 11, -10,1을 올림하면 -10

floor()

버림. 주어진 값보다 작은 가장 큰 정수 반환. ceil과 정반대

max() / min()

주어진 두 값 중에서 가장 큰 값 혹은 가장 작은 값 반환

pow()

첫 번째 매개 변수를 밑, 두 번째 매개 변수를 지수로 하는 거듭제곱값 반환

exp()

지수 함수 값을 반환

log()

지수 로그 값을 반환

sin() / cos() / tan()

주어진 각도의 사인/코사인/탄젠트 값을 반환

random()

0.0이상 1.0미만의 double 값을 반환

rint()

짝수 반올림

'Java > Notion' 카테고리의 다른 글

Class / Method  (0) 2023.04.24
ArrayList  (0) 2023.04.23
String  (0) 2023.04.19
배열  (0) 2023.04.19
StringBuffer / StringBuilder  (0) 2023.04.17
728x90

내용을 변경할 수 없는 불변 클래스

// 스트링 리터럴이 같은 값일 경우 참조변수명이 달라도 각각의 참조변수가 같은 주소값을 가짐
String str1 = "SSS";
String str2 = "SSS";
String str3 = "SSS";

// 빈 문자열 사용가능
String Str = "";
int num = 1;
String Str2 = "" + num; // "1" 문자열 1로 바뀜

// char[]형 배열을 매개변수로 받아 스트링 문자열로 만들 수 있음
String str = new String(char[]형 배열);

// 스트링버퍼 인스턴스가 갖고 있는 문자열도 매개변수로 받을 수 있음
String str = new String(스트링버퍼);

 

String str = "Hello World Java";

String[] arr = str.split(" ");

문자열을 지정된 구분자를 기준으로 나누어 배열로 반환
str.isEmpty();

문자열이 비어 있는지 유무 확인
String newStr = str.replace("Hello", "Hi");

특정 문자나 문자열을 다른 문자나 문자열로 대체. 기존 문자열의 변환이 아닌 새로운 문자열을 반환

String newStr = str.replace('a', 'x');

문자끼리의 대체

replace() / replaceAll()

replace는 대소문자를 구분하기 때문에 구분 없이 사용할때는 replaceAll


String.valueOf()

어떤값이든 값들을 스트링타입으로 바꿔줌, null값도 "null"로 반환

char 타입이랑 스트링 타입을 비교하는 경우 타입을 맞춰주기 위해 사용

equals()

스트링과 특정 문자열이 일치하는지 확인

str.contains(찾을 문자열)

찾을 문자열이 스트링에 존재하는지 여부를 반환

char, String, StringBuffer, StringBuilder 모두 매개변수로 받을 수 있음

toCharArray()

문자열을 배열로 바꿔서 넣어줌

toLowerCase() / toUpperCase()

문자열을 소문자나 대문자로 바꿔줌

indexOf() / lastIndexOf()

지정한 문자 또는 문자열이 현재 문자열에서 처음 혹은 마지막으로 나타나는 인덱스를 반환

compareTo()

문자열과 사전순서로 비교하여 같으면 0 이전이면 음수 이후면 양수 반환

concat()

문자열을 뒤에 추가함

startsWith() / endsWith()

지정된 문자열로 시작하는지 / 끝나는지 검사

equalsIgnoreCase()

대소문자 구분없이 비교

substring()

주어진 시작 위치부터 끝 위치 범위에 포함된 문자열을 가져오고, 이 때 끝 위치의 문자는 포함되지 않음

끝 위치를 지정하지 않을 시 문자열의 길이까지로 자동으로 지정

trim()

문자열의 양쪽 끝의 공백을 제거한 결과를 반환하지만 문자열 중간에 있는 공백들은 제거되지 않음

 

String.join(구분자, 문자열 배열 혹은 여러가지 문자열)

문자열 배열을 인덱스마다 지정한 구분자로 구분한 결과를 스트링으로 만들어줌

'Java > Notion' 카테고리의 다른 글

Class / Method  (0) 2023.04.24
ArrayList  (0) 2023.04.23
Math  (0) 2023.04.23
배열  (0) 2023.04.19
StringBuffer / StringBuilder  (0) 2023.04.17
728x90

length : 배열의 길이. 배열이 비어있는지 확인할 때도 사용


//배열의 끝에 값을 추가할 때 - java.util.Arrays 를 import 해줘야 함
타입[] 배열명 = Arrays.copyOf(원본배열,원본배열의_길이+1); // 원본 배열을 복사하고 1칸을 늘림
배열명[배열명.길이-1] = 추가할 내용 // 배열이 늘어났으니 마지막 인덱스에 내용 추가

//배열의 처음에 값을 추가할 때 - java.util.Arrays 를 import 해줘야 함
타입[] 배열명 = new 타입[원본배열.length + 1];
System.arraycopy(원본배열, 0, 배열명, 1, 원본배열.length);
배열명[0] = 추가할 값;

System.arraycopy(복사할 원본 배열, 복사 시작 할 인덱스, 복사될 대상 배열, 
대상 배열의 시작 인덱스, 복사할 개수)

//빈 배열 만들기
new int[]{};

//배열을 복사하여 새로운 배열을 생성
//시작하는 인덱스는 포함 끝나는 인덱스는 미포함
//복사된 배열의 길이 끝값-시작값
//System.arraycopy 메소드랑 비슷하지만 복사될 배열의 길이를 직접 지정 할 필요가 없음
Arrays.copyOfRange(원본배열, 원본배열에서 복사를 시작할 인덱스, 원본 배열에서 끝낼 인덱스)

Arrays.sort() : 배열의 값을 낮은값에서 큰값으로 정렬해줌

 

'Java > Notion' 카테고리의 다른 글

Class / Method  (0) 2023.04.24
ArrayList  (0) 2023.04.23
Math  (0) 2023.04.23
String  (0) 2023.04.19
StringBuffer / StringBuilder  (0) 2023.04.17
728x90

StringBuffer

String과 다르게 내용을 변경할 수 있는 문자형 배열

크기를 지정하지 않을 시 기본 크기는 16으로 지정되고, 저장할 문자열의 길이를 고려해 적절한 크기로 생성해야 함

동기화가 되어 있어 멀티 쓰레드에 안전

싱글 쓰레드 프로그램에서는 동기화는 성능을 떨어트리기 때문에 사용하지 않지만

멀티 쓰레드에서는 StringBuffer를 사용하는 것이 좋음

선언

StringBuffer 참조변수명 = new StringBuffer("문자열" 혹은 길이);

주의

equals 메소드가 오버라이딩 되어있지 않기 때문에 주소를 비교하기 때문에 문자열의 내용을 비교하려면

toString 메소드를 사용하여 String으로 변환하여 String의 equals 메소드를 사용해야 함

StringBuilder

기존의 스트링 클래스는 수정할 때마다 새로운 객체를 생성해야 하지만 스트링 빌더는 가변하기 때문에

객체를 새로 생성할 필요가 없어 문자열을 반복적으로 수정하거나 긴 문자열을 처리할 때 유용

동기화되어 있지 않아 멀티 쓰레드에 안전하지 않음

하지만 싱글 쓰레드 프로그램에서는 동기화는 성능을 떨어트리기 때문에

싱글 쓰레드에서는 StringBuilder를 사용하는 것이 좋음

선언

StringBuilder 참조변수명 = newStringBuilder(내용)

 

메소드

append() : 매개변수의 값을 StringBuffer의 문자열 맨 뒤에 추가

capacity() : StringBuffer 인스턴스의 버퍼 크기(char형 배열의 길이)를 알려줌

length() : 담겨있는 문자열의 길이를 알려줌 (빈 공간은 포함하지 않음)

charAt() : 지정 인덱스에 있는 문자 반환

delete() : 시작 위치부터 끝 위치 사이의 문자를 제거하지만 끝 위치의 문자는 제외

deleteCharAt() : 지정 인덱스의 문자 하나만을 제거

insert() : 지정 인덱스에 문자를 추가

replace() : String의 replace와 같음

reverse() : StringBuffer에 저장된 문자열의 순서를 거꾸로 나열함

setCharAt() : 지정 인덱스 문자를 주어진 문자로 바꿈

setLength() : 길이를 줄이는 경우 길이보다 큰 인덱스에 있던 문자열은 지워지고, 만약 길이가 더 길어서 빈 공간은

문자열의 기본값이 null로 채워짐

toString() : String 타입으로 변환

substring() : String의 substring과 같음

'Java > Notion' 카테고리의 다른 글

Class / Method  (0) 2023.04.24
ArrayList  (0) 2023.04.23
Math  (0) 2023.04.23
String  (0) 2023.04.19
배열  (0) 2023.04.19

+ Recent posts