상세 컨텐츠

본문 제목

프로그래머 도전기 4일차

프로그래머가 될거야!

by Choyee 2023. 8. 30. 23:21

본문

슬슬 생각지도 못했던 어려움이 생기기 시작했습니다

한글이 깨져서 출력이 된다거나... 클래스에 오류가 생겼는데

어느 클래스에서 생긴건지 감이 잡히지 않아서 한참 둘러보니

새미콜론을 안찍었더군요...

친구들 말로는 이제부터가 시작이고 벽하나를 맞딱뜨리게 됐다고 하는데

과연... 용어들이 슬슬 헷갈리기 시작해 진도가 쉽게 나가지지 않았습니다...

걱정이 스믈스믈 더해져가는 4일차였습니다

 

01

 

 

* 클래스 = 코드 -> 생성 = 인스턴스 화 => 인스턴스(object)

  클래스를 사용하기 위해서 => 클래스를 생성해야 함
     => new 예약어 이용 -> 클래스 생성

  ex) 클래스형 변수이름 = new 생성자;
       Student studentA = new Student();

  하나의 클래스 코드 -> 여러 개의 인스턴스 생성 가능
                            -> 인스턴스 -> 힙 메모리에 생성 됨 -> 힙 메모리에 생성된 인스턴스는 자동으로 삭제되지 않는다
                                             -> 각각의 인스턴스 = 다른 메모리에 다른 값을 가짐

  지역변수 = 블록 안의 변수

  메소드 = 변수X => 명령어 집합 -> 힙 메모리에 생성

 

0123



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


* 생성자 = constructor
           = 인스턴스 생성시 new 키워드와 함께 사용했던 생성자
            -> <modifiers><class_name>([<argument_list>])
                 {
                   [<statements>]
                  }
            => 생성자 = 인스턴스를 초기화 할 때의 명령어 집합
                 생성자의 이름 = 그 클래스의 이름과 같음
                 생성자 => 메소드X -> 상속X, 리턴 값X

  디폴트 생성자 - 하나의 클래스 -> 반드시 하나 이상의 생성자가 존재
                         - 프로그래머가 생성자를 기술하지 않으면 -> 디폴트 생성자가 자동으로 생김
                                                                                    = 컴파일러가 코드에 넣어 줌
                         - 매개변수X, 구현부X
                         - 만약 클래스에 -> 매개변수가 있는 생성자를 추가하면 -> 디폴트 생성자는 제공되지 않음

  생성자 오버로드 = 필요에 의해 생성자를 추가하는 경우 -> 여러 개의 생성자가 하나의 클래스에 있음(overload)
                                                                                              = 하나의 클래스에 여러 개의 생성자가 존재할 수 있다는 의미



* 변수의 자료형 - 기본 자료형 = int, long, float, double 등
                         - 참조 자료형 = String, Data, Student(사용자가 직접 만드는 자료) 등
                         - 클래스형 으로 선언하는 자료형 = 클래스가 변수의 자료가 됨


* 정보은닉 = private 접근 제어자
                   - 클래스의 외부 -> 클래스 내부의 멤버 변수나 메서드에 접근하지 못하게 함
                   - 멤버 변수나 메서드 -> 외부에서 사요하지 못하도록 하여 => 오류를 줄일 수 있음
                   - 변수에 대해서 -> 필요한 경우 = get(), set() 메서드를 제공

 



* this가 하는 일 = 자신의 메모리를 가리킴
                            생성자에서 다른 생성자 호출
                            자신의 주소를 반환
                             => 생성된 인스턴스 스스로를 가리키는 예약어

-> 자기 자신을 가르키는 this
public Person(String name, int age){
              this.name = name;
              this.age = age;
 }
=> 이 코드에서 this를 생략할 경우 -> name이나 age = 파라미터로 사용되는 name과 age로 인식됨
      => 반드시 this를 써줘야 한다

-> 생성자에서 다른 생성자를 호출
public Person(){
     this("이름없음",1);
}
publick Person(String name, int age){
     this.name = name;
     this.age = age;
}
=> this를 이용 -> 다른 생성자를 호출할 때 = 그 이전에 어떠한 statement도 사용할 수 없다
=> 생성자가 여러개이고 파라미터만 다른 경우 = constructor overloading 이라고 한다

 




* 객체 간의 협력
  => 상황 -> 객체 지향으로 프로그래밍
  -> 각 객체들의 속성, 각 객체들의 메서드 구현
  -> 하나의 클래스에서 다른 클래스를 호출하여 하나의 클래스의 객체 속성에 영향을 준다


* static 변수 = 다른 언어에서도 사용되는 명령어
  static     int       serialNum;
 예약어   자료형   변수 이름
=> 여러개의 인스턴스 -> 같은 메모리의 값을 공유하기 위해 사용
      = 인스턴스A, 인스턴스B, 인스턴스C -> static 변수 공유

=> 전체 프로그램이 메모리에 로드될 때 할당이 되어 -> 데이터 영역의 메모리에 생성된다
     = 인스턴스의 생성과 관계없이 클래스 이름으로 직접 참조 됨 = 클래스 변수라고도 한다
                                                                                      (멤버변수 = 인스턴스 변수)


* 변수의 유효 범위

지역 변수 (로컬 변수) = 위치 : 함수 내부 / 사용 범위 : 함수 내부
                               메모리 : 스택 / 생성, 소멸 : 함수가 호출 될때 생성 -> 함수가 끝나면 소멸
멤버 변수 (인스터스 변수) = 위치 : 클래스 멤버 / 사용 범위 : 클래스 내부, private이 아니면 참조 변수로 다른 클래스에서 사용 가능
                                     메모리 : 힙 / 생성, 소멸 : 인스턴스가 생성될 때 생성 -> 가비지 컬렉터가 메모리를 수거할 때 소멸
static 변수 (클래스 변수) = 위치 : static 예약어 사용 -> 클래스 내부 / 사용 범위 : 클래스 내부, private이 아니면 다른 클래스에서 사용 가능
                                   메모리 : 데이터 영역 / 생성, 소멸 : 프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성 -> 프로그램이 끝나고 메모리를 해제할 때 소멸



* singleton 패턴 = static 응용
인스턴스 여러개 생성 -> 어느 프로그램 안에서 단 하나의 인스턴스만 존재해야할 경우 사용

 

 

 

2023. 08. 30 (수)

관련글 더보기