📓 Do it! 자바 프로그래밍 입문

상속

1. 클래스 상속 문법 extends

class B extends A {
}

- A가 가지고 있는 속성이나 기능을 추가로 확장하여 B 클래스에 구현

- 'B 클래스가 A 클래스를 상속받는다'

- 상위 클래스가 하위 클래스보다 일반적인 개념이고, 하위 클래스는 상위 클래스보다 구체적인 클래스

2. 클래스 생성과 형 변환

- 하위 클래스가 생성될 때는 상위 클래스의 생성자가 먼저 호출됨

- super: 부모를 부르는 예약어, 상위 클래스에 선언한 멤버 변수나 메서드를 하위 클래스에서 참조할 때도 사용

- super( ): 상위 클래스의 디폴트 생성자가 호출됨

- 모든 하위 클래스는 상위 클래스 자료형으로 형 변환(업캐스팅)될 수 있지만 그 역은 성립하지 않음

3. 메서드 오버라이딩

- 상위 클래스에서 정의한 메서드가 하위 클래스에서 구현할 내용과 맞지 않을 경우에 하위 클래스에서 이 메서드를 재정의하는 것

- 반환형, 메서드 이름, 매개 변수 개수, 매개변수 자료형이 반드시 같아야 함

- @Override: 이 매서드는 재정의된 매서드라고 컴파일러에 명확히 알려주는 역할

 

*참고) 정수, 문자열 변환

int num = Integer.parseInt("12345");
String str = Integer.toString(12345);

'오공완' 카테고리의 다른 글

231105 오공완  (0) 2023.11.05
231102 오공완  (0) 2023.11.03
231031 오공완  (0) 2023.11.01
231030 오공완  (0) 2023.10.31
231028 오공완  (0) 2023.10.28

📓 Do it! 자바 프로그래밍 입문

this 예약어

- 생성된 인스턴스 스스로를 가리키는 예약어

- 클래스의 생성자에서 다른 생성자를 호출할 수 있음

- 생성된 클래스 자신의 주소 값을 반환할 수 있음

static 변수

- static 변수 = 정적 변수 = 클래스 변수

- 클래스에서 공통으로 사용하는 변수

- 프로그램이 실행되어 메모리에 올라갔을 때 딱 한 번 메모리 공간이 할당됨

- static으로 선언한 변수는 인스턴스 생성과 상관없이 먼저 생성되고 그 값을 모든 인스턴스가 공유하게 됨

변수 유효 범위

1. 지역 변수(로컬 변수)

- 함수 내부에 선언

- 함수 내부에서만 사용

- 스택 메모리

- 함수가 호출될 때 생성되고 함수가 끝나면 소멸함

2. 멤버 변수(인스턴스 변수)

- 클래스 멤버 변수로 선언

- 클래스 내부에서 사용하고 private이 아니면 참조 변수로 다른 클래스에서 사용 가능

- 힙 메모리

- 인스턴스가 생성될 때 힙에 생기고, 가비지 컬렉터가 메모리를 수거할 떄 소멸됨

3. static 변수(클래스 변수)

- static 예약어를 사용하여 클래스 내부에 선언

- 클래스 내부에서 사용하고 private이 아니면 클래스 이름으로 다른 클래스에서 사용 가능

- 데이터 영역

- 프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 ㅅ생성되고 프로그램이 끝나고 메모리를 해체할 때 소멸됨

배열

1. 배열 선언과 초기화- 배열: 자료가 연속으로 나열된 자료 구조- 배열 요소: 배열을 이루는 각각의 자료

자료형[] 배열이름 = new 자료형[개수];
자료형 배열이름[] = new 자료형[개수];

- 배열을 선언하면 그와 동시에 각 요소의 값이 초기화됨

- 자료형에 따라 정수는 0, 실수는 0.0, 객체 배열은 null

- 배열 선언과 동시에 특정 값으로 초기화할 수도 있음

//배열 초기화하기
int[] studentIDs = new int[] {101, 102, 103};   //개수는 생략함
int[] studentIDs = new int[3] {101, 102, 103;}  //오류 발생
int[] studentIDs = {101, 102, 103};             //int형 요소가 3개인 배열 생성

//배열의 자료형을 먼저 선언하고 초기화하는 경우에는 new int[]를 생략할 수 없음        
int[] studentIDs;                           //배열 자료형 선언
studentIDs = new int[] {101, 102, 103};     //new int[]를 생략할 수 없음

2. 배열 복사하기

1) 기존 배열과 배열 길이가 같거나 더 긴 배열을 만들고 for문을 사용하여 각 요소 값을 반복해서 복사하는 방법

2) System.arraycopy() 메서드 사용

- src: 복사할 배열 이름

- srcPos: 복사할 배열의 첫 번째 위치

- dest: 복사해서 붙여 넣을 대상 배열 이름

- destPos: 복사해서 대상 배열에 붙여넣기를 시작할 첫 번째 위치

- length: src에서 dest로 자료를 복사할 요소 개수

- 객체 배열의 요소에 저장된 값은 인스턴스 자체가 아니고 인스턴스의 주소 값

- 객체 배열을 복사할 때 인스턴스를 따로 생성하는 것이 아니라 기존 인스턴스의 주소 값만 복사

- 두 배열의 서로 다른 요소가 같은 인스턴스를 가리키고 있으므로 복사되는 배열의 인스턴스 값이 변경되면 두 배열 모두 영향을 받음

 

3. 깊은 복사(deep copy)

- 얕은 복사(shallow copy): 주소 값만 복사

- 인스턴스를 따로 관리하고 싶다면 직접 인스턴스를 만들고 그 값을 복사해야 됨

 

4. 향상된 for문(enhanced for loop)

- 처음에서 끝까지 모든 요소를 참조할 때 사용하면 편리

- 배열 요소 값을 순서대로 하나씩 가져와서 변수에 대입

- 따로 초기화와 종료 조건이 없기 때문에 모든 배열의 시작 요소부터 끝 요소까지 실행

for(변수 : 배열){
     반복 실행문;
}

다차원 배열

- 배열의 모든 요소를 참조하려면 각 행을 기준으로 열 값을 순회하면 됨

int [ ] [ ] arr = new int [2] [3];
int [ ] [ ] arr = {{1, 2, 3}, {4, 5, 6}};
public class TwoDimension{
    public static void main(String[] args){
        int [][] arr = {{1, 2, 3}, {4, 5, 6}};

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

- 중첩 for문은 배열 인덱스용으로 i, j 두 변수를 사용. i는 행, j는 열.

- 전체 배열 길이인 arr.length는 행의 개수를, 각 행의 길이 arr[i].length는 열의 개수를 나타냄

ArryList 클래스

1. ArrayList 클래스의 주요 메서드

- boolean add(E e): 요소 하나를 배열에 추가합니다. E는 요소의 자료형을 의미합니다.

- int size( ): 배열에 추가된 요소 전채 개수를 반환 합니다.

- E get(int index): 배열의 index 위치에 있는 요소 값을 반환합니다.

- E remove(int index): 배열의 index 위치에 있는 요소 값을 제거하고 그 값을 반환합니다.

- boolean isEmpty( ): 배열이 비어 있는지 확인합니다.

2. ArrayList 클래스 활용하기

ArrayList<E> 배열이름 = new ArrayList<E>( );

- 배열을 선언하는 부분의 < >안에 사용할 객체의 자료형(E)를 쓰면 됨

ArrayList<Book> library = new ArrayList<Book>();

- ArrayList는 java.util 패키지에 구현되어 있는 클래스이기 때문에 ArrayList를 사용하기 위해서는 컴파일러에게 ArrayList가 어디에 구현되어 있는지 알려줘야 함

- ArrayList를 사용하려면 자바 클래스를 선언하기 전에 import java.util.ArrayList; 문장을 반드시 써줘야 함

- 임포트(import): 내 코드에 없는 클래스를 가져와 사용할 때 이 클래스가 어디에 구현되어 있다고 알려주기 위해 코드 맨 위에 선언하는 것

 

'오공완' 카테고리의 다른 글

231102 오공완  (0) 2023.11.03
231101 오공완  (0) 2023.11.02
231030 오공완  (0) 2023.10.31
231028 오공완  (0) 2023.10.28
231027 오공완  (0) 2023.10.28

📓 Do it! 자바 프로그래밍 입문

클래스와 인스턴스

1. 클래스 사용과 main() 함수

- 멤버 변수는 클래스 속성을 나타내고, 메서드는 멤버 변수를 이용하여 클래스 기능을 구현

- main() 함수: 자바 가상 머신(JVM)이 프로그램을 시작하기 위해 호출하는 함수. 클래스 내부에 만들지만, 클래스의 메서드는 아님.

main() 함수에서 클래스를 사용하는 방법
1) 클래스 내부에 main() 함수를 만듦
2) 외부에 테스트용 클래스를 만들어 사용

2. new 예약어로 클래스 생성하기

- 클래스를 생성하는 코드: 클래스형 변수이름 = new 생성자;

- 클래스를 생성할 때는 new 예약어를 사용하고 이어서 생성자를 써줌

- 클래스 자료형 변수를 선언하고 new 예약어로 생성자를 호출하여 대입하면 새로운 클래스가 생성됨

- '클래스가 생성된다' = 클래스를 실제 사용핧 수 있도록 메모리 공간(힙 메모리)을 할당 받는다

- 인스턴스: 실제로 사용할 수 있도록 생성된 클래스

- 참조변수: 인스턴스를 가리키는 클래스형 변수

Student studentAhn = new Student();
- Student 클래스 자료형으로 studentAhn 변수를 선언하고 new Student();로 Student 클래스를 생성하여 studentAhn에 대입한다는 뜻
- studentAhn: 참조 변수, 이 변수가 생성된 인스턴스를 가리킴

3. 인스턴스와 참조 변수

- 클래스: 객체를 코드로 구현한 것, 클래스의 생성자를 호출하면 인스턴스가 만들어짐

- 인스턴스: 클래스가 메모리 공간에 생성된 상태

- 객체: 생성된 클래스의 인스턴스

- 참조 변수를 사용하면 인스턴스의 멤버 변수와 메서드를 참조하여 사용할 수 있음. 도트(.) 연산자를 사용

studentAhn.studentName = "안연수";                     //멤버 변수 사용
System.out.println(studentAhn.getStudentName());     //메서드 사용

4. 인스턴스와 힙 메모리

- 클래스 생성자를 하나 호출하면 인스턴스가 힙 메모리에 생성됨

- 클래스가 생성될 때마다 인스턴스는 다른 메모리 공간을 차지함

- 멤버 변수를 저장하는 공간이 매번 따로 생김 (멤버 변수 = 인스턴스 변수)

용어 설명
객체 객체 지형 프로그램의 대상, 생성된 인스턴트
클래스 객체를 프로그래밍하기 위해 코드로 만든 상태
인스턴스 클래스가 메모리에 생성된 상태
멤버 변수 클래스의 속성, 특성
메서드 멤버 변수를 이용하여 클래스의 기능을 구현
참조 변수 메모리에 생성된 인스턴스를 가리키는 변수
참조 값 생성된 인스턴스의 메모리 주소 값

생성자

1. 생성자(constructor)

- 클래스를 처음 만들 때 멤버 변수나 상수를 초기화하는 것

- 생성자 이름은 클래스 이름과 같고, 생성자는 반환값이 없음

- 생성자가 없는 클래스는 클래스 파일을 컴파일할 때 자바 컴파일러에서 자동으로 생성자를 만들어줌 -> 디폴트 생성자

- 디폴트 생성자는 매개변수가 없고 구현 코드도 없음

- 인스턴스가 생성됨과 동시에 멤버 변수의 값을 지정하고 인스턴스를 초기화하기 위해 생성자를 직접 구현하여 사용

2. 생성자 오버로드

- 클래스에 생성자가 두 개 이상 제공되는 경우

- 필요에 따라 매개변수가 다른 생성자를 여러 개 만들 수 있음

public class Student {
    int studentID;

    public Student(int studentID){      
        this.studentID = studentID;    //학번을 매개변수로 입력받아 Student 클래스를 생성하는 생성자
    }
}

정보 은닉

1. 접근 제어자(access modifier)

- public: 외부 틀래스 어디에서나 접근할 수 있음

- protected: 같은 패키지 내부와 상속 관계의 클래스에서만 접근할 수 있고 그 외 클래스에서는 접근할 수 없음

- 아무것도 없는 경우: default이며 같은 패키지 내부에서만 접근할 수 있음

- private: 같은 클래스 내부에서만 접근할 수 있음

2. get(), set() 메서드

public class Student {
    int studentID;
    private String studentName;
    int grade;
    String address;

    public String getStudentName(){     //private 변수에 접근해 값을 가져옴
        return studentName;
    }

    public void setStudentName(String studentName){     //private 변수에 접근해 값을 지정함
        this.studentName = studentName;
    }
}

3. 정보 은닉이란?

- 클래스 내부에서 사용할 변수나 메서드를 private으로 선언해서 외부에서 접근하지 못하도록 하는 것

- 객체 지향 프로그래밍의 특징 중 하나이며 자바에서는 접근 제어자를 사요하여 정보 은닉을 구현

- 필요한 경우에 private으로 선언하여 오류를 막을 수 있음

 

'오공완' 카테고리의 다른 글

231102 오공완  (0) 2023.11.03
231101 오공완  (0) 2023.11.02
231031 오공완  (0) 2023.11.01
231028 오공완  (0) 2023.10.28
231027 오공완  (0) 2023.10.28

📓 Do it! 자바 프로그래밍 입문

 

if/else 조건문

조건식에는 결과가 참, 거짓으로 판별되는 식이나 참, 거짓의 값을 가진 변수, 상수를 사용할 수 있음

if (조건식) {
    수행문;           // 조건식이 참일 경우에 이 문장을 수행
}
if (조건식) {
    수행문1;           // 조건식이 참일 경우에 이 문장을 수행
}
else {
    수행문2;           // 조건식이 거짓일 경우에 이 문장을 수행
}

if-else if-else문: 하나의 상황에 조건이 여러 개인 경우

 

switch-case문

주로 조건이 하나의 변수 값이나 상수 값으로 구분되는 경우 사용

switch (조건) {
    case 값1 : 수행문1;
    break;
    case 값2 : 수행문2;
    break;
    case 값3: 수행문3;
    break;
    default : 수행문4;
}

default: if-else문의 else 역할을 수행

break: switch-case문의 수행을 멈추고 빠져나가도록 만듦

 

case문 동시에 사용하기

예제) 각 달의 날짜 출력
case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 : day = 31;
break;
case 6 : case 9 : case 11 : day = 30;
break;
case 2 : day = 28;
break;

반복문

1. while문

조건식이 참인 동안 수행문을 반복해서 수행

2. do-while문

{ } 안의 문장을 무조건 한 번 수행한 후에 조건식을 검사

조건이 만족하는지 여부를 마지막에 검사

do {
   수행문1;
   ...
} while(조건식);
   수행문2;
   ...

3. for문

for(초기화식; 조건식; 증감식) {
   수행문;
}

초기화식: for문이 시작할 때 딱 한 번만 수행하며 사용할 변수를 초기화

조건식: 언제까지 반복 수행할 것인지 구현

증감식: 반복 횟수나 for문에서 사용하는 변수 값을 1만큼 늘리거나 줄임

 

4.continue문

반복문 안에서 continue문을 만나면 이후의 문장은 수행하지 않고 for문의 처음으로 돌아가 증감식을 수행

반복문을 계속 수행하는데, 특정 조건에서는 수행하지 않고 건너뛰어야 할 때 사용

for(num = 1; num <= 100; num++) {
   if(num%2 == 0)       //num 값이 짝수인 경우
      continue;               //이후 수행을 생략하고 num++ 수행
   total += num;           //num 값이 홀수인 경우에만 수행
}

객체 지향  프로그래밍

1. 객체 지향 프로그램

- 먼저 객체를 만들고 객체 사이에 일어나는 일들을 구현하는 것

- 클래스를 기반으로 프로그래밍

- 객체를 클래스로 구현하는 것 -> '클래스를 정희한다'

2. 클래스

(접근 제어자) class 클래스 이름 {
     멤버 변수; 
     메서드;
}

- class: 클래스를 만드는 예약어

- 클래스의 이름은 대문자로 시작

- 멤버 변수(member variable) = 속성(property) = 특성(attribute): 클래스 내부에 선언하여 객체 속성을 나타내는 변수

- 변수의 자료형: 기본 자료형(int, long, float, double 등), 참조 자료형(String, Date, Student 등)

3. 메서드 / 멤버 함수

- 클래스 내부에서 멤버 변수를 사용하여 클래스의 기능을 구현하는 것

4. 패키지

- 클래스 파일의 묶음

메서드

1. 함수

- 메서드는 함수의 한 종류

- 매개변수: 함수의 입력으로 받는 변수

- result: 반환 값

int add(int num1, int num2){
    int result;
    result = num1 + num2;
    return result;
        }

위 예시에서

- 함수 이름: add, 프로그래머가 함수 기능과 관련 있게 임의로 만듦

- 매개변수: num1, num2

- return 예약어: return

- 함수 반환형: int

class FunctionTest{
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 20;

        int sum = add(num1,num2);
        System.out.println(num1 + "+" + num2 + " = " + sum + "입니다");
    }
    public static int add(int n1, int n2){
        int result = n1 * n2;
        return result;
    }
    //함수를 호출할 때 넘겨주는 변수 이름과 함수를 구현할 때 사용한 매개변수 이름은 같지 않아도 됨. 이 둘은 젼혀 상관이 없음.
}

2. 함수 호출과 스택 메모리

- 함수를 호출하면 그 함수만을 위한 메모리 공간이 할당되는데, 이 메모리 공간을 스택(stack)이라고 함

- 프로그램에서 여러 함수를 사용하는 경우에 함수를 호출한 순서대로 메모리 공간이 만들어지고 맨 마지막에 호출한 함수부터 반환됨

- 메모리 공간도 맨 마지막에 추가된 것부터 스택에서 사라짐

- 지역 변수: 함수 내부에서만 사용하는 변수, 스택 메모리에 생성됨

'오공완' 카테고리의 다른 글

231102 오공완  (0) 2023.11.03
231101 오공완  (0) 2023.11.02
231031 오공완  (0) 2023.11.01
231030 오공완  (0) 2023.10.31
231027 오공완  (0) 2023.10.28

📓 Do it! 자바 프로그래밍 입문

 

비트(bit): 0 또는 1로 표현할 수 있는 최소 단위

- 8비트가 모이면 1바이트(byte)

 

자바 프로그램에서는 2진수, 8진수, 16진수를 사용할 수 있음
2진수: 0B / 8진수: 0 / 16진수: 0X

 

"변수를 선언한다"
: 변수의 자료형을 선택하고 이름을 정하는 것

int level; //정수형 변수 level을 선언
level = 10; //값 10을 level 변수에 대입

= 기호: 프로그램에서는 '오른쪽 값을 왼쪽에 대입한다'는 의미로 사용

 

<변수 초기화하기>

int level = 10; //level 변수 선언과 동시에 값을 대입(초기화)
**4바이트(int형) 크기의 메모리 공간 이름(변수이름)은 level입니다. 이 공간에 값 10을 넣습니다.

 

변수를 선언할 때 변수 값을 바로 대입할 수도 있음
초기화: 변수에 처음 값을 대입하는 것

 

변수는 컴퓨터 내부의 메모리 공간에 저장됨

변수를 선언한다는 것은 선언한 변수 이름으로 어떤 위치에 있는 메모리를 얼마만큼의 크기로 사용하겠다는 뜻

 

기본 자료형은 각 자료형이 사용할 공간의 크기(바이트 수)가 정해져 있음

정수의 기본형은 int형이고, byte형이나 short형은 컴퓨터가 연산을 편리하게 하려고 내부적으로 int형으로 변환

'오공완' 카테고리의 다른 글

231102 오공완  (0) 2023.11.03
231101 오공완  (0) 2023.11.02
231031 오공완  (0) 2023.11.01
231030 오공완  (0) 2023.10.31
231028 오공완  (0) 2023.10.28

+ Recent posts