이숭간 공부기록

7/30 본문

공부공부/Java

7/30

이숭간 2020. 7. 30. 14:48
728x90

@유효범위 - 이름이 겹쳐서 생기는 문제를 해결하기위해

 

 

# 전역변수 ( global variance) = 멤버변수 = 필드 - 클래스소속, 정적할당, 클래스밑에 바로 선언되는 변수 -> 함수밖에서 선언되는 클래스 전체에서 사용가능한 변수.

필드에서 선언된 변수는 지역변수와 다르게 값을 할당하지 않아도 자동으로 초기값을 갖는다.

 

전역변수 선언 - [접근제어자(public, private 등)] [static, final 등] 자료형 변수명 [= 초기값] ;  // 빨간색은 필수아님.

 

#전역변수에 의존하는 메소드는 다른 곳에서의부품으로 사용될수 없다. 지역변수로 파라미터를 사용하는것을 권장

 

#지역변수 - 함수안에서 선언된 변수, 즉 변수가 선언된 그 함수 안에서만 유효한 변수가 됨, 함수의 인자로 선언한 변수도 지역변수임

 

# 지역변수와 전역변수의 메모리할당 - 지역변수는 메소드가 호출될 때 메모리에 공간을 할당받고 종료 시 해제되지만 필드(전역변수)는 프로그램이 실행되어 종료될 때까지 메모리상에 남아있게 된다.(세부내용은 메모리 구조 참고) 따라서 필드에서 변수를 선언 시 클래스 내 모든 메소드에서 사용이 가능하다.

[출처] [JAVA/자바] 필드(field) - 전역변수, 멤버변수|작성자 JOKER

 

JOKER's ROOM : 네이버 블로그

코딩, AI, IT, 프로그램 정보 공유 서이추 환영

blog.naver.com

#this - 인스턴스 자신을 의미함. 객체에서 전역(변수)의 의미를 갖는다.

           this는 static이 붙지 않은 메소드나 생성자에서 사용 가능합니다. 
         + 매개변수(지역변수)가 없으면 this는 생략해도 됩니다.

 

# 절차지향프로그래밍에서는 전역변수를 거의안씀 -> 객체지향프로그래밍이라도 전역변수 사용을 자제하는것이 좋지만 하나의 객체가 너무 비대해지지 않도록 적당한 단위로 쪼개서 사용하는것이중요함.

 

-----------------------------------------------------------------------------------------------------------------------------------

@ 초기화와 생성자

 

#생성자는 값을 반환하지 않고, 클래스와 동일한 이름을 가진다. (public class이름())

 

#생성자를 만들지 않으면 디폴트 생성자가 자동으로 만들어져있음 , 기본생성자가 아닌 즉 매개변수가 있는 생성자를 개발자가 명시적으로 만들었을때 자바는 디폴트생성자를 자동으로 생성하지 않는다. --> 디폴트생성자를 

 

#생성자는 객체가 생성될때 동시에 객체를 초기화해주기 위함

-----------------------------------------------------------------------------------------------------------------------------------

@ 상속 extends

# 기존의 객체를 그대로 유지하면서 어떤 기능을 추가하는 방법

 

@ 상속과 생성자

#하위클래스에서 생성자를 호출하면, 그전에 먼저 부모클래스의 생성자를 호출하게 되는데, 이때 부모클래스의 디폴트생성자가 없으면 오류가남. 따라서 만약 부모클래스에 인자를 준 생성자를 개발자가 따로 만든 상황일때는 디폴트 생성자를 명시적으로 선언해주어야함.--> 그래스 그냥 생성자를 만들때 디폴트도 항상같이 써주는것이 좋다.

 

# super -> 부모를 뜻함. super를 사용하면 부모클래스에서 기본생성자가 없어도 오류안남.

 하위클래스에서 부모클래스에 있는 생성자와 똑같은 기능을 수행하는 생성자를 이용하려할때, super를 이용하면 부모생성자를 호출할 수 있다.

super (left, right) -> 부모클래스의 생성자에게 인자로 left, right값을 주면서 호출

 

# 상위클래스의 초기화가 끝난상태에서만 하위클래스에서 초기화를 진행할 수 있음. 따라서 하위클래스의 생성자안에서 super를 사용할때는 부모클래스의 생성자를 먼저 호출해서 초기화를 해준뒤 그다음에 코드를 작성해야한다.

-----------------------------------------------------------------------------------------------------------------------------------

@오버로딩 - 클래스에 같은 이름의 메소드를 서로다른 매개변수를 지정하여 다른결과값을 도출하게하는것.

 

 

 

-----------------------------------------------------------------------------------------------------------------------------------

@오버라이딩 - 부모클래스에 있는 함수를'재정의' 하는것 (덮어쓰기)

 

#기본적으로 부모의 규칙은 넓게 모든자식듫에게 적용시키고, 예외적으로 특정 자식들에서 오버라이딩을 하면 예외를 적용해서 부모보다 더 높은 우선순위를 가지는 메소드를 만들수있다.

 

#제약 - 부모의 리턴 데이터타입과 자식의 리턴데이터타입은 일치해야함. 안그럼 오버라이드할때 오류남

1. 메소드이름

2. 메소드 매개변수 개수, 데이터타입, 순서

3. 메소드 리턴타입

-----------------------------------------------------------------------------------------------------------------------------------

@패키지

 

# 이름의 충돌을 막기위해

 

# 다른 패키지의 클래스를 사용하려면 패키지를 import한다.

 

-----------------------------------------------------------------------------------------------------------------------------------

 

@api

 

#api란, 자바시스템을 제어하기위해서 자바에서제공하는 명령어.

 

System.out.println --> 자바가 제공한 자바의 조작방법

println- 메소드

system - 클래스 (맨앞이 대문자니까)

out?? - system의클래스 멤버중에 하나인 변수 -> 객체이므로 println이라는 메소드를 가지고있음

 

이때 system이라는클래스를 인스턴스화하지 않았는데도 필드out에 접근할수있음은 out이 system클래스 안에서 static으로 선언된클래스변수임을 뜻한다. (public static final PrintStream out)

 

class System {

PrintStream out = new PrintStream();

....

}

 

--> 시스템이라는 클래스안에있는 out이라는 printStream이라는 클래스 타입의 변수가 있고, 객체로 선언을 해놓았을것.

즉 system 클래스안에는 PrintStream 타입의 객체 out이존재함.즉 out은 PrintStream 클래스에 있는 println메소드를 사용할수 있따.

( 헷갈림 주의 - out이라는것은 printStream클래스의 인스턴스일뿐임)

즉, statci으로 선언함으로서 system클래스에 바로 접근할수있게하고, 동시에 그 변수에 printStream클래스의 객체를 할당함.

 

 

#객체를 저장한 공간을 변수라고 함.out은 변수이자 static으로 메모리에 올라간 공간이고
그것에 담긴 객체는 PrintStream 인것이죠.

 

 

system이라는 클래스를 임포트하지도않았는데 사용할수 있는 이유는??

--> java.lang.* 는 임포트를 따로 명시적으로 하지 않아도 자동으로 임포트함 (systme은 java.lang소속)

 

참고 ( ui ? api)

 

ui - 유저 인터페이스 (키보드, 마우스, 스피커와같이 시스템의 상태와 사람이 교류할수있도록하는 입력장치와 출력장치)

하드웨어적 ui, 소프트웨어적 ui (웹브라우저의버튼과 같은것들)

api - 애플리케이션 프로그래밍 인터페이스 (  

ex) javascript:alert("Hello World") 에서 단순히 alret이라는 명령어만 이용함으로서 웹브라우저상에 나타나는 경고창을 이용할수 있다는것 -> 웹브라우저에서 제공하는 API를 사용한것임

#웹브라우저 개발자들도 운영체제에서 제공하는 API를 사용해서 웹브라우저를 만듬. 예를들면 운영체제가 미리 만들ㄹ어놓은  버튼들을 호출함 

 

#플랫폼(기반시스템) - 응용프로그램 (운영체제 - 웹브라우저)

-----------------------------------------------------------------------------------------------------------------------------------

 

# static - static이란 말은 객체의 생성 없이도 클래스 변수나 클레스 메소드에 접근할 수 있음을 뜻 합니다.
static을 선언하는 순간 메모리에 변수와 메소드가 잡히기 때문입니다.

 

https://mangkyu.tistory.com/47

 

[Java] static변수와 static 메소드

1. Static 정리 Java에서 Static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미합니다. 이를 정확히 이해하기 위해서는 메모리 영역에 대한 이해가 필��

mangkyu.tistory.com

-----------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

https://opentutorials.org/course/1223/5447

'공부공부 > Java' 카테고리의 다른 글

[Java] Wrapper class란?  (0) 2021.07.13
[Java] Optional이란?  (1) 2021.05.24
[Lombok] @RequiredArgsConstructor / @NoArgsConstructor / @AllArgsConstructor  (0) 2021.05.22
java에서 스레드 생성  (0) 2020.11.29
자바의 메모리 구조  (0) 2020.11.27