DAY_010[국비] 자바 웹프로그래밍 과정

Bona의 블로그 입니다.·2022년 10월 11일
0

국비과정

목록 보기
11/99

 🌞 Day 010 : Class 

  • 자바가 객체지향 언어인 이유, Class에 대해 배웠다.



 🍁 1 교시 

 🔖 연습 문제 : 메서드 연습하기 

  • 문제

  • 배열에서 했던 예제를 응용한 문제


  • 예시 - 성적표
    1 단계 : 각 자료를 각각의 낱개 자료로 취급
    2 단계 : 위 표에서(성적표) 자료를 열별로 묶어서 같은 자료형끼리,
               관련 자료형끼리 묶어서 취급 (관련자료들을 그룹으로)
    3 단계 : C언어의 구조체(Struct) 사용
               (여러 자료형을 갖는 자료하 그룹으로 취급)
    4 단계 : 구조체 그룹에 기능적인 면을 추가해서 그 자체만으로도
               프로그램으로 사용할 수 있게 취급, 자료와 메서드가 하나로

 🚗 Class 

  • Class?
    프로그램으로 처리하고자 하는 대상을 자료화해서 하나의 자료형으로 정의한,
    사용자 정의 자료형

  • 필요에 의해 기본자료형(int, double, char 등)외에 새롭게 정의한 자료형

  • 한 개 이상의 자료, 하나 이상의 자료형을 저장할 수 있는 복합 자료형

  • 활용되기 이전, 정의만되어 있는 클래스는 정의영역(설계도, 원본)이다.

  • 그동안 사용해오던 Scanner도 클래스이다.
    Scanner sc = new Scanner(System.in); 변수선언(참조변수)

  • 자바의 프로그램 단위는 클래스 이다.

  • 하나의 프로그램 파일(XXX.java) 안에는 여러 개의 클래스를 넣어서 사용할 수 있다.

  • 여러 개의 클래스 중 파일이름과 "같은" 이름을 쓰는 클래스를 public으로 지정 한다.

  • 그 클래스에는 보통 public static void main(){ }이 존재
    그 클래스는 자료형으로서의 클래스이기 보단 프로그램 실행단위로서 클래스 이다.

  • 앞으로 우리가 만들어서 사용하거나, import해서 사용할 클래스는 자료저장 & 가공용 클래스가 많다.

  • 클래스 만드는 법 : Class라는 키워드를 이용해서 만든다.

  • First라는 클래스를 만들면서 Class 익히기

 🎈 클래스와 객체 

  • 속성(멤버필드, 멤버변수, 필드)
    : 클래스에 속한 정보(변수)들.
    속성은 변수로 생성하며 클래스의 '멤버필드'라고도 호칭 한다.

  • 클래스를 만들면 그들을 프로그램에 적용하기위해 "클래스 변수"를 클래스 이름으로 생성한다.
    First a1;
    생성된 변수는 레퍼런스(참조)변수이다.
    배열 때와 마찬가지로, new 명령을 이용하여 HEAP 영역에
    적정공간(클래스가 정의된 크기만큼)을 확보한 후,
    그 주소를 a1변수에 저장하여 사용한다.

  • 레퍼런스 변수와 new에의해 만들어진 공간이 합쳐지면,
    이를 "객체"라고 부른다



 🍁 2 교시 

 🔖 연습 문제 : 클래스 만들기 (1) 

  • 문제
    번호, 이름, 과목성적(국어, 영어, 수학), 총점, 평균을 속성으로 가진 클래스 만들 것 이름은 Student로 하기

 🎈 멤버 메서드 

  • 멤버 메서드
    클래스에 소속되어 클래서 객체에 종속된 메서드
    멤버 메서드는 특별한 경우를 제외하고는 'static'을 사용하지 않는다.

  • static : 정적 멤버를 선언할 때 사용
    (정적 static - "처음부터 만들어지는"이라는 뜻)

  • 클래스 안에 있는 멤버 메서드
    같은 클래스 내부에 정의 되어 있는 메서드에서 변수를 사용할 때,
    변수 앞에 객체 이름을 붙이지 않는다.

  • 객체 이름을 쓰는 경우는 클래스 외부에서 실제 객체가 만들어지고,
    (외부에서) 멤버변수나 멤버메서드가 사용될 때 붙인다.

  • 멤버변수와 멤버메서드는 필요한만큼 제한없이 생성 & 사용이 가능

  • 멤버메서드는 클래스형으로 생성된 객체 "전용" 메서드이다.
    메서드의 실행이 객체전용으로만 사용이 된다는 뜻
    멤버메서드의 내용은 해당 객체와 상관없는 명령이 들어갈 수도 있지만
    보통은 멤버변수들의 조작, 출력, 입력을 위한 명령들로 주로 구성된다.

  • 멤버 메서드는 멤버변수처럼 객체가 만들어지고,
    그 객체가 앞에(.)과 같이 있어야 사용 가능하다.
    ex) a1.name     a1.age

  • a1 객체 내에 생성된 name, age변수의 값을 이용해서 output 멤버 메서드가 실행된다.
    name과 age는 각각의 객체에 따로 만들어지지만, 멤버 메서드는 각 객체들에게 "공유"된다.
    다른 객체가 실행할 때도 각자 자신의 name과 age 값으로 output이 실행된다.



 🍁 3 교시 

 🔖 연습 문제 : 클래스 만들기 (2) 

  • 같은 패키지 안에서는 클래스 이름이 중복될 수 없다.
    앞의 클래스와 비슷하지만 같은 이름을 쓸 수 없으므로 Std라는 이름으로 작성한다.
  • 클래스 안에 필요한 멤버 메서드 작성하기

  • 직접 작성해본 코드



 🍁 4 교시 

 🚗 접근 지정자 

  • 접근 지정자?
    모든 클래스의 멤버는 현실에 존재하는 대상의 정보로서,
    직접적인 접근이 허용되는 것과 허용되면 안되는 정보가 있다.
    접근 지정자는 클래스의 멤버들에 대한 접근을 제어하는 키워드이다.

  • 클래스의 멤버변수와 멤버메서드는 접근지정자(private, public, protected)에 의해서 외부에서의 접근을 조절할 수 있다.

  • 접근지정자를 사용하지 않는 경우 기본지정으로 public이 설정되며,
    클래스 외부에서 직접 접근이 가능하다.
    이는 멤버변수의 값이 무분별하게 수정될 수 있다는 뜻

  • 이를 방지하고 무분별한 접근을 막기위해 멤버변수에 private을 지정
    private으로 지정된 멤버는 자기자신이 속한 class 내부의 멤버메서드만 접근 가능하다.

  • 멤버메서드는 대개 public으로 지정되며, 외부에서 자유로운 접근이 가능하다.

  • 정리

    •  private  : 클래스 내부에서만 사용가능한 멤버를 정의하는 키워드
    •  public  : 접근에 제한이 없는 멤버를 정의하는 키워드
    •  protected  : child class에서만 자유롭게 접근이 가능, "상속"에서
                     자세히 학습할 예정
    •  default  : 접근지정자를 지정하지 않으면 자동으로 갖게되는
                 접근 지정자이며, 같은 패키지 내에서 자유롭게 접근 가능

 🔖 연습 문제 : 접근 제어자 학습 

※ 캡슐화 : 여러 자료를 하나로 묶는 것
※ 은닉화 : 중요자료를 보호, 감추는 것



 🍁 5 교시 

  • 멤버메서드의 역할은 은닉자료의 접근만 있는 것은 아니다.
    멤버자료의 유효한 값의 관리와 가공을 담당하기도한다.

 🎈 멤버 메서드를 제작하는 주된 목적은 ... 

  • private으로 보호되는 멤버변수에 값을 저장하거나, 얻어오거나
    그 둘의 목적이 가장 크다.

  • 따라서 특정 멤버메서드(값을 저장하거나 얻어오는 메서드)를 별도의 사유없이 필요한만큼 만들고 시작하는 경우가 많다.

  • 메서드의 이름은 getter, setter와 멤버변수이름을 조합해서 만든다.

  • 이클립스에서 이런 멤버메서드를 자동으로 만들어주는 기능이 있다.
       [ getter setter의 자동생성 ] 
    1. 현 위치에서 마우스 오른쪽 버튼 클릭
    2. Source 메뉴
    3. Generate Getters and Setters 선택
    4. selectAll 클릭
    5. Generate 클릭

 🔖 연습 문제 : 클래스 만들기 (4) 

  • bunho name kor eng mat total average를 멤버변수로 하는 Std2 클래스를 만들고 getter setter도 만들기
  • 모든 멤버변수는 private



 🍁 6 교시 

  • 2주차 내부평가 시험



 🍁 7 교시 

 🚗 생성자(Constructor) 

  • 생성자(Constructor)
    클래스의 객체가 생성될 때, 멤버필드의 초기화 등의 목적으로 사용되는 메서드 new에 각각의 객체가 생성될 때, 서로 다른 메모리를 할당해서 서로 겹치지 않게 하는 기능도 포함한다.

  • 생성자의 특징

    • 멤버메서드 이다.
      (특별한 멤버메서드-처음 객체 생성 시만 호출, 중간에 호출되지 않는다.)
    • 클래스의 이름과 동일한 이름을 갖는 메서드.
    • 리턴값이 없는 메서드
    • 따로 정의(생성)하지 않아도 이미 클래스 내부에 존재하는 메서드
    • 생성자는 각각의 객체가 생성될 때마다 호출되는 메서드
    • 주로 하는 일은 new와 함께 객체가 저장될 HEAP메모리를 할당하고
      그 안에 멤버 변수를 만드는 일을 한다.
  • 앞선 예제와 같이 클래스 내부에 생성자를 꺼내어 따로 정의 하지 않으면,컴파일러는 자동을 클래스 내부에 숨어 있는 생성자(디폴트 생성자)를 호출한다.

  • 디폴트 생성자 : Bclass(){}와 같이 생겨서 기본 형태만 설정된 생성자

  • 내용없이 생성자를 따로 정의하는 것은, 따로 생성자를 아예 기술하지 않는 것과 같다.

  • 그러나 매개변수가 생기거나 추가 명령이 필요하다면 꺼내놓고 추가 기술을 해서 이용할 수 있다.
    생성자도 리턴값이 없을 뿐, 메서드이므로 매개변수를 사용할 수 있다.

  • 생성자의 매개변수를 활용하는 경우 각각의 객체마다 서로 다른 값을 가질 수 있다.

  • 클래스 내부에 매개변수가 있는 생성자가 꺼내진 경우, 매개변수가 없는 디폴트 생성자는 새로 생성된 생성자로 대체되어서 없는 생성자가 된다.
    (디폴트 생성자가 없어진 것)

  • 따라서 매개변수가 있는 생성자가 꺼내진 경우, 매개변수 없는 디폴트 생성자를 따로 적어 주어야 한다.
    (매개변수 없는 생성자를 이용해서 객체를 만들려면)



 🍁 8 교시 

 🔖 연습 문제 : 생성자 오버로딩 연습 

  • 문제

    1. 코드 블럭의 코드가 정상실행이 되도록 생성자 만들기
    2. 생성자에서 각각 어떤 매개변수가 있는 생성자인지 출력되게하기
      예) System.out.println("ExClass 클래스의 디폴트 생성자 호출");
      System.out.println
      ("ExClass 클래스의 int 타입 매개변수를 전달받는 생성자 호출");
      System.out.println
      ("ExClass 클래스의 double 타입 매개변수를 전달받는 생성자 호출");
  • 코드작성


 🔖 연습 문제 : 구구단 

  • int형 자료를 매개변수로하는 생성자와 디폴트 생성자를 오버로딩하는 클래스 생성하기

  • 전달 인수가 있으면 전달인수를 매개변수 dan에 저장, 없으면 dan에 0저장

  • 멤버변수는 int dan; 한 개만 생성

  • 멤버메서드는 print() 하나

  • dan이 0이 아니면 해당 구구단 출력

  • dan이 0이면 2~9 구구단 모두 출력

  • 내가 쓴 코드

  • 2~9단이 한 단씩 세로로 출력되는 코드
    2~5단 / 6~9단이 한 줄에 쭉 출력되도록 수정함

  • 수정한 코드 ⬇️



 🍂 마무리 

  • 클래스에 대해서 배웠다. 혼자 예습을 할 때보다 더 깊이 알 수 있었고, 코드를 따라 써보거나 혼자서 작성해보니 훨씬 더 잘 이해가 되는 것 같다.
  • 한 번에 이해되는 개념은 아니지만 조금 감이 잡혀가는 듯하다.
  • 앞으로도 계속 사용할 문법이니 점점 더 나아지겠지...



profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글