[IT국비지원] 개발자 교육 13일 차 : JAVA(2023.08.11)fit.구디아카데미,김지훈 강사님

Nicole Gold·2023년 8월 11일
0

K-digital training

목록 보기
14/60

이하 구디아카데미 김지훈 강사님의 수업자료와 강의 내용 정리, 실습한 내용을 정리함!

Static

정적 멤버와 static keyword

  • Static 영역은 클래스 원본이 자리 잡은 곳이다.

  • Member 에게 static 키워드를 붙이면 바로 이 영역에 저장이 된다.

  • 그래서 static member 는 객체화 하지 않고 사용한다.

  • 남발할 경우 원본 자체가 바뀌기 때문에 시스템 안정성에 좋지 않음

  • class

  1. public class 에 일반 변수를 int field = 0으로 선언
  2. static int sField = 134로 선언
  3. int multi 메서드에 a, b 매개변수를 넣으면 반환값으로 a*b 가 나옴
  4. static 영역의 int plus 라는 메서드는 a, b의 매개변수로 a+b를 뱉음
  5. static 영역의 int minus 라는 메서드는 a, b 를 넣으면 a-b 를 리턴함
  • main
  1. Sub 클래스를 sub 변수로 객체화 해줌
  2. sub에서 field 값을 추력하면 0
  3. sub에서 multh 메서드를 사용하면 6*2 = 12 출력
  4. 원본 Sub의 sfield 라는 변수를 가져옴 134 출력
  5. 원본Sub의 plus 메서드를 가져와서 4+3을 해줌 7 출력
  6. 원본 Sub의 minus 메서드를 가져와서 10-5 을 해줌 5 출력
  7. sub의 sField를 가져옴 134
  8. sub 의 minus 메서드에 4, 3을 넣음 1 출력
  9. sub의 plus 메서드에 4, 3넣 넣음 7 출력
  10. 새 Sub를 sub2 에 복사해옴
  11. sub2.field 값을 10000으로 선언
  12. sub 의 필드 값은 0(sub 에서는 따로 선언하지 않았기 때문에 초기 값을 가져옴)
  13. sub2 의 필드값은 10000(선언한 값으로 가져옴
  14. Sub(원본의).sField를 3000으로 선언함(스태틱 값을 변경
  15. sub의 sField 값도 3000이 됨
  16. sub2의 sField 값도 3000이 됨

같은 멤버인데 저장 영역이 다를 경우!

  • 입력
  • 출력
  1. public class 이름은 Inner
  2. static main 메서드는 문자열 args
  3. st_msg 메서드 호출 : hello static member를 매개변수로 넣음
  • "static 멤버 메세지=hello static member 출력
  1. Inner 클래스를 복사해서 inner 에 담음
  2. inner의 h_msg 메서드 호출 : Hello, java를 매개변수로 넣음
  • 일반 영역 메시지=Hello, java 출력
  • static st_msg 메서드 호출 msg+from heap를 매개변수로 넣음
    • static 멤버 메세지=Hello, java 출력
  • msg 출력 : Hello, java
  1. st_msg 메서드 호출 : static 멤버 메세지=이게 맞아? 출력

final keyword

  • final 은 한번 지정되면 프로그램 종료 시까지 변경이 불가능하다.

  • final 은 생성자에서만 초기화 가능하다.

  • static final 의 경우 객체화 초기화가 되지 않아 불변의 값으로 간주한다.

  • 우리는 이런 필드를 상수(Constant)라고 하며 모두 대문자로 표기한다.

  • class

  1. public class은 Person 이다.
  2. 문자열 nation 변수를 final 로 지정한다.
  3. 문자열 name 변수를 final 로 지정한다.
  4. 문자열 SSN 을 statinc final 230811-1234567로 지정한다.(불변)
  5. public 클래스 Person 메서드의 매개변수는 문자열 nation, 문자열 name 이다.
  6. public 클래스 Person의 변수(필드) nation 에 nation 이라는 매개변수를 넣는다.
  7. public 클래스 Person 의 변수(필드) name 에 name 이라는 매개변수를 넣는다.
  • Main
  1. Main 클래스의 main 함수는 문자열 args를 매개변수로 넣을 것이다.
  2. class Person 을 복사해서 person 변수에 넣는다. 가져오는 형태에 매개변수 nation에 값 korea 를 넣고 매개변수 name에 니콜을 넣는다.
  3. person 함수의 nation 값을 출력한다.
  4. person 함수의 name 값을 출력한다.
  5. 원본 Person의 SSN 값을 출력한다.

요약

Static 영역은 원본이 저장되는 영역이다.
Static 멤버를 호출할 때는 그래서 객체화하지 않는다.
그 외의 멤버는 모두 객체화를 하여 사용한다.
Final 은 프로그램 시작 시 한번 정의되고 나면 바꿀 수 없다.

Import

  • class 를 객체화할 때 다른 폴더(package)에 있는 class 를 불러올 경우도 있다.
  • 이 경우 우리는 import 문을 사용한다.
  • Calculator2 class를 가져오기 위해 import 사용 예시

  • class

  • main

  • console

접근 제한 자

  • Java 에서는 접근을 허용하거나 제한할 수 있다.

  • 남들이 사용할 수 있는 코드도 있지만 내부적으로만 사용할 코드도 있기 때문이다.

  • 특정 부분의 접근을 제한하는 것을 캡슐화(Encapsulation)라고 한다.

  • Private 은 외부 class 에서 사용이 불가능하다.

  • 외부에서 꼭 써야 할 경우 사용할 방법

  • class

  1. private 접근 제한을 boolean power 변수에 걸고 값을 false로 넣어 준다
  2. private 접근 제한을 int panSpeed 변수에 걸어 준다.
  3. private 접근 제한을 int temp 변수에 걸어 준다.
  4. 이것들을 각각 외부에서 조절 가능 / 외부에서 볼 수만 있게 제한 한다.
  5. isPower boolean 타입 함수에 반환값을 power을 넣어준다.
  6. setPower 함수에 매개변수 power를 넣고 power = 매개변수 power 로 작동시킨다.
  7. getPanSpeed 함수의 반환값을 panSpeed 로 뱉는다.
  8. setPanSpeed 함수에 panSpeed 매개변수를 넣고 panSpeed = 매개변수 panSpeed를 작동시킨다.
  • temp 는 110 - panSpeed 이다.
  1. getTemp 함수는 temp 값을 반환한다.
  • main
  1. Computer 클래스를 com으로 복사해서 가져온다.
  2. com의 setPower 함수에 true 값을 넣는다.
  3. 출력 power:true
  4. com의 setPanSpeed 함수에 80 값을 넣는다.
  5. 출력 getPanSpeed 80
  6. com.getTemp()를 출력하면 temp 값이 110-panSpeed 이기 때문에 30이 출력된다.

요약

  • 불러올 member 가 다른 package 에 있을 경우 import 문을 사용한다.
  • 모든 member 는 사용할 수 있는 영역을 지정하는 접근 제한자가 있다.
  • Private 은 같은 클래스 내에서만 접근이 가능하다.
  • public 은 다른 package 에서도 접근 가능하다.

--

  • 점점 어려워지고 있고 혼란스럽다. 내가 정말 개발자가 될 수 있을까?
profile
JAVA 개발자로 가는 길

1개의 댓글

comment-user-thumbnail
2023년 8월 11일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기

관련 채용 정보