42_JAVA Study 01

수빈·2021년 12월 10일
0

42JAVA

목록 보기
2/9
post-thumbnail

1주차 서브젝트

1. 이름 출력하는 프로그램 만들기

#클래스 #패키지

2. 사칙연산 클래스 만들기

#객체 #클래스 #속성, 멤버 변수 #함수와 매소드 #실행클래스

3. 학생 클래스 만들기

#객체 #객체지향프로그래밍 #클래스 #인스턴스

4. 사람 클래스 만들기

#인스턴스 #생성자 #생성자오버로딩 #디폴트생성자


클래스

  • 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용
    자바에서는 클래스를 가지고, 여러 객체를 생성하여 사용
    클래스는 객체의 상태를 나타내는 필드와 객체의 행동을 나타내는 메소드로 구성
    > 필드 = 클래스에 포함된 변수
    메소드 = 명령문의 집합
    > 

인스턴스

  • 클래스를 사용하기 위해 해당 클래스 타입의 객체를 선언해야 한다. 클래스로부터 객체를 선언하는 과정을 인스턴스화라고 한다 이렇게 선언된 해당 클래스 타입의 객체를 인스턴스라고 한다.

    인스턴스 = 메모리에 할당된 객체

  • 하나의 클래스로부터 여러 개의 인스턴스를 생성할 수 있다
    이렇게 생성된 인스턴스는 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있다
    > 해당 클래스의 모든 메소드는 해당 클래스에서 생성된 모든 인스턴스가 공유
    > 
  • 메소드
    어떠한 특정 작업을 수행하기 위한 명령문의 집합
    ```java
    접근제어자 반환타입 메소드이름(매개변수목록){//선언부
    //구현부
    }
    ```
    
    하나의 클래스에 같은 이름의 메소드를 두 개 이상 정의할 수 없지만 메소드 오버로딩을 이용하면 같은 이름의 메소드를 중복하여 정의할 수 있다
    
    > - 메소드 오버로딩
    메개변수의 개수나 타입을 다르게 하여 같은 이름의 또 다른 메소드를 작성하는 것.
    메소드 오버로딩을 사용함으로써 메소드에 사용되는 이름을 절약할 수 있다.
    또한 메소드를 호출할 때 젠달해야 할 매개변수의 타입이나 개수에 대해 신경 쓰지 않고 호출할 수 있다
    > 

패키지

package 패키지 이름; < 패키지 선언 문법
패키지 이름에는 패키지의 경로까지 포함한 풀 네임을 명시해야 함

자바의 모든 클래스는 반드시 하나 이상의 패키지에 포함되어야 하지만 자바 컴파일러는 소스 파일에 어떠한 패키지의 선언도 포함되지 않으면 기본적으로 이름 없는 패키지 (unnamed package)에 포함해 컴파일한다. 따라서 패키지를 명시하지 않은 모든 클래스와 인터페이스는 모두 같은 패키지에 포함하게 된다

  • import문
    위에 선언한 패키지에 속한 클래스를 다른 파일에서 사용하기 위해서는 클래스 이름 앞에 패키지의 경로를 포함한 풀네임을 명시해 사용해야 한다 하지만 클래스를 사용할 때마다 매번 긴 이름을 사용하는 것은 비효율적이므로, 자바에서는 import 키워드를 별도로 제공한다.
    import문을 사용하면 다른 패키지에 속한 클래스를 패키지 이름을 제외한 클래스 이름만으로 사용할 수 있다
1. import 패키지이름.클래스이름;
2. import 패키지이름.*;

속성, 멤버 변수

  • 필드 선언
    이름과 번호를 필드로 가지고 있는 car 클래스 선언
public class Car{
        String name;
        int number;
    }

car 클래스를 인스턴스화

Car c1 = new Car();
Car c2 = new Car();
//Car라는 인스턴스가 메모리에 2개 만들어 진다. 객체별로 name과 number라는 속성을 가진다.

속성 이용하기

//c1.name은  c1이 참조하는 객체의 name 을 의미.

c1.name = "소방차";  //c1이 참조하는 객체의 name을 소방차로 설정
c1.number = 1234;   // c1.number = 1234란 c1이 참조하는 객체의 number를 1234 로 설정

c2.name = "구급차"  //c2가 가리키는 객체의name을 구급차로 설정
c2.number = 1004;  //c2가 가리키는 객체의 number를 1004로 설정

System.out.println(c1.name);  //콘솔에 c1이 참조하는 객체의 name 을 출력합니다.
System.out.println(c1.number); //콘솔에 c1이 참조하는 객체의 number 를 출력합니다.

String name = c2.name;   //c2가 참조하는 객체의 name 을 String 타입 변수 name 도 참조하게 합니다.

생성자

  • 생성자의 특징
    • 생성자는 리턴 타입이 없다
    • 생성자를 프로그래머가 만들지 않으면 매개변수가 없는 생성자가 컴파일할 때 자동으로 만들어진다
    • 매개변수가 없는 생성자를 기본 생성자라고 한다
    • 생성자를 하나라도 프로그래머가 만들었다면 기본 생성자는 자동으로 만들어지지 않는다
  • 생성자의 역할
    • 생성자가 하는 일은 객체가 될 때 필드를 초기화
    • 자동차가 객체가 될때 반드시 이름을 가지도록 하려면 car 클래스를 다음과 같이 만들어야 함
public class Car{
        String name;
        int number;

        public Car(String n){
            name = n;
        }
    }
  • car 클래스는 기본 생성자를 가지지 않는다 (기본 생성자로 car객체를 생성할 수 없다)

생성자 오버로딩

  • 생성자의 매개변수의 유형과 개수가 다르게 하여 같은 이름의 생성자를 여러 개 가질 수 있다.
  • 생성자도 메소드와 마찬가지로 여러개를 선언할 수 있다.
  • 매개변수의 수와 타입이 다르다면 여러개의 생성자를 선언할 수 있다.
public class Car{
      String name;
      int number;

      public Car(){

      }

      public Car(String name){
          this.name = name;
      }

      public Car(String name, int number){
          this.name = name;
          this.number = number;
      }
  }

	public class CarExam4{
		public static void main(String args[]){
				    Car c1 = new Car();
				    Car c2 = new Car("소방차");
				    Car c3 = new Car("구급차", 1234);
				}
    }

참조 변수

  • 참조형 타입 = 기본형 타입을 제외한 모든 타입 (ex. String, Data)
  • 참조형 변수
    • String str = new String("hello");
    • new 라는 키워드는 객체를 메모리에 올려준다. 이렇게 메모리에 올라간 객체를 인스턴스라고 말한다
    • 메모리에 올라간 인스턴스를 가리키는 변수, 참조하는 변수, 레퍼런스 하는 변수 = str / 변수가 인스턴스를 가지고 있는 게 아닌 말 그대로 가리킨다는 의미
    • str이라는 변수에는 메모리의 위치 값이 저장된다. 메모리의 위치값이 저장된다고 하더라고, 어떤 메모리에 저장되는지 그 정보를 알 수 있는 방법이 없다 (그래서 str변수는 String인스턴스를 참조한다고 알면 됨)

썸네일: oneook

profile
42Seoul -soooh ~ 2022.04

0개의 댓글