본문 바로가기
Today I learned

JAVA 2주차 강의 정리

by soheemon 2018. 10. 24.



JAVA 2주차 강의 정리


값을 한번 넣은 변수는 왠만하면 값을 바꾸지 말아라.

- 가독성이 떨어지기 때문이다.

- A라는 값을 넣었다가, 또다시 B라는 값을 넣으면 안된다.[각주:1]

- 변수에 최초 넣은 값은 바꾸지 않는 코딩을 하라.

- 꼭 바꿔야 하는 상황이라면 구분을 해야한다.

암묵적인 코딩컨벤션

- 변수를 선언과 동시에 초기화 할경우 = 그 변수안에 있는 값은 변하지 않는다는것을 의미한다.[각주:2]

- 변수를 선언만 한 상태이다. = 앞으로 해당 변수에 다양한 값이 들어갈것이라는것을 의미한다.[각주:3]

결합연산자

- 문자열과 문자열을 연결한다.

- 숫자가 있을경우 산술연산자로써 더하는 기능을 한다.[각주:4]

코딩컨벤션

- 대입연산자(=) 오른쪽은 tab으로 맞춰준다.[각주:5]

- 타입이 같을땐 구분연산자로 연결하여 입력한다.[각주:6]

- 한줄주석은 코드 바로 우측옆에 작성해야 한다.[각주:7]

- 주석이 길어질땐 /* + 엔터 누르면 생기는 주석을 이용한다.

- 여러줄 주석의 맨 첫번째 줄과 맨 마지막 줄은 비워야 한다.


참조타입과 기본타입

- JAVA는 크게 두가지 타입이 있다.[각주:8]

- 기본타입은 stack에 값이 들어간다.

- 참조타입은 stack에 주소가 들어있고, 실제 값은 힙에 들어가있다.[각주:9]

인수 인자 전달인자 파라미터

- 전달인자: 호출함수쪽에서 작성하는 인수[각주:10]

- 매개변수: 실제 구현부에서 작성한 인수 [각주:11]


클래스형

- Student라는 클래스가 있을때, Student타입에는 Student타입의 값만 넣을 수 있다.

- 이런 타입을 클래스형이라고 한다.


New

- 생성자

- 생성자는 리턴타입과 접근제한자가 없다.

- 클래스명과 이름이 같다.

- 해당 클래스가 호출 될 때 제일 먼저 읽어들인다.

객체생성

- Student sohee = new student(); 이같은 행위를 객체를 생성했다고 표현한다.

- Student 클래스 코드 자체로는 메모리에 올라가지 않는다.[각주:12]

- 메모리에 올리지 않으면 클래스 안의 객체들을 사용 할 수 없다는 의미이다.

- New 를 이용하여 객체를 생성했다는것은 메모리에 올렸다는 뜻이 된다.


객체 생성과 인스턴스화

- new Student() // 객체를 생성했다고 한다.

- Student sohee = new Student(); // 인스턴스화 했다고 한다.

- 이때 sohee는 인스턴스 변수라고 한다.

 

인스턴스 변수

- 스택에 존재하고 힙에 있는 데이터를 참조하는 변수.

- 참조변수, 레퍼런스 변수라고도 한다.

- 연결연산자를 이용해서 메서드를 호출 할 수 있다.[각주:13]

String 클래스

- String은 JAVA에서 특별한 클래스이다. (불변객체클래스 이다)

- 레퍼런스 변수임에도 불구하고 값을 복사해도 절대 원본의 값은 변하지 않는다.

- String name = "sohee";는 사실 String name = new String("sohee"); 이다.

- String 클래스 안에는 여러가지 메서드들이 있다.[각주:14]


참조변수를 전달인자로 사용[각주:15]

- 참조변수를 전달인자로 사용했을때. 일반 변수와는 달리 스택으로 참조해, 힙에 직접 가서 값을 바꾼다.

- 하지만 이때 사용한 전달인자와 매개변수는 다르다. 그저 참조하는 힙이 같을 뿐이다.


Static

- Static은 JVM내 메모리영역중 클래스라는 공간에 저장된다.

- 다른 클래스의 객체를 사용할때는 그 클래스를 인스턴스화 해야한다.

- 하지만 static이 붙는 객체들은 인스턴스화 한 객체들보다 먼저 생성된다.(메모리에 올라가 있는다.)

- 따라서, Static이 붙는 객체들은 인스턴스화를 안해도 사용 할 수 있다.


Public Private 접근제어자, 접근제한자.

- public = 해당 '프로젝트' 내에서 어디서든 접근 할 수 있다.

- private = 같은 클래스 내에 객체들 끼리만 접근 할 수 있다.[각주:16]


Static 객체와 인스턴스 객체[각주:17]

- Static이 아닌 객체들을 인스턴스 객체라고 한다.[각주:18]

- Static 메서드 내에서는 인스턴스 객체를 사용 할 수 없다.[각주:19][각주:20]

- Static 메서드는 Static만 호출 할 수 있다.[각주:21]

- Static객체는 인스턴스화 없이 같은 프로젝트 내 다른 클래스에서 사용 할 수 있다.

상속

- extends

- 자식클래스는 부모클래스에 있는 모든 객체를 사용 할 수 있다.[각주:22]

public default

- default : 같은 패키지 내에서만 접근 할 수 있다.

- public : 모든 패키지에서 접근 할 수 있다.

- public > default > private




- 이클립스에서 변수를 선언후 사용하지 않았을 경우 노란물결표시가 생긴다.


- 메서드라고 하자.



- String 타입 변수는 빈 문자열로 초기화한다.

String name = "";


- 빈 문자열과 NULL은 다르다. NULL은, 변수의 값을 지울때만 사용한다.



- String과 int을 결합연산자로 연결하면 문자열이 된다.


- 자릿수가 긴 숫자를 가독성을 높히려면 _를 이용한다.(JAVA7 이후)

int number = 12_123_332;


- 들여쓰기를 잘해야한다. 괄호 실수가 제일 많다.

- 호출함수 위 한줄은 비워야 한다.


- 다른클래스에 있는 메서드를 호출하고 싶을땐

클래스명.메서드명


- 구분연산자나 클래스명이 적히지 않은 메서드는 같은 클래스 안에 있다.


- 클래스 객체들은 이클립스 내에서 이름이 기울어져 있다. (예) out)








  1. String name = "sohee"; String name = "hwangsohee"; 처럼 다른값으로 여러번 할당되는 경우.. [본문으로]
  2. String name = "soheemon"; [본문으로]
  3. String name = " "; [본문으로]
  4. System.out.println("sohee" + "mon"); *연산자 앞뒤로는 띄어쓰기를 한다. [본문으로]
  5. String name =# "Sohee";일때 #가 표시된 부분을 의미한다. 이클립스에서 입력하면 어떤뜻인지 이해 할 수 있을것이다. [본문으로]
  6. String name = "sohee", address = "Seoul"; 처럼 , 이후에 줄을 바꾸고 tab을 이용해 가독성을 높혀주는것이 포인트같다. [본문으로]
  7. String name = "sohee"; // 이것은 주석입니다. // 다음에 한칸 띄어야 한다. [본문으로]
  8. String을 참조타입 int를 기본타입이라고 한다. [본문으로]
  9. 스택에 String name이 있다면 힙에는 "sohee"가 들어가있다. name은 힙에있는 "sohee"를 가리키고 있다. [본문으로]
  10. callMyName(name);일때 name에 해당한다. [본문으로]
  11. callMyName(String name) { ..... } 에서의 name에 해당한다. [본문으로]
  12. C와 C++과는 다른점인듯 [본문으로]
  13. sohee.greeting(); 처럼 [본문으로]
  14. 그리고 이것들은 다른 클래스내의 객체들처럼 sohee.length()를 이용해 호출 할 수 있다. [본문으로]
  15. 참조변수는 포인터 같은 느낌이다. [본문으로]
  16. 이는 인스턴스화를 해도 해당 클래스 내의privete 객체에는 접근 할 수 없다는 의미이다. [본문으로]
  17. 보통 스태틱 메소드는 유틸리티 성 메소드를 작성할 때 많이 사용된다. 예를 들어 "오늘의 날짜 구하기", "숫자에 콤마 추가하기"등의 메소드를 작성할 때에는 클래스 메소드를 사용하는 것이 유리하다. [본문으로]
  18. 인스턴스화 하지 않으면 절대 사용 할 수 없는 변수 [본문으로]
  19. Static 메서드가 JVM의 클래스 메모리 영역에 올라가있는 시점에서는 존재하고있지 않은 상태이기 때문이다. [본문으로]
  20. A라는 클래스내의 static 메서드가 인스턴스 메서드를 호출 하고 싶다면. 자기자신을 인스턴스화 해서 다른 인스턴스 메서드를 호출 할 수 있다. A test = new A(); // Static 메서드 블록안이라고 가정 test.instanceMethod; 처럼 하지만 이 방법은 클래스를 또다른 스택공간을 하나새로 만들어서 호출한것이다. [본문으로]
  21. 만약 public class 내에서 static 메서드를 호출 하고 싶다면 static staticMethod testCode = new staticMethod(); 처럼 static 참조변수를 사용 해야 한다. [본문으로]
  22. private 접근지시자가 붙은 객체를 제외하고 부모클래스의 객체를 인스턴스화 하지 않아도 사용 할 수 있다는 의미다. [본문으로]

'Today I learned' 카테고리의 다른 글

11월27일  (0) 2018.11.27
singleton pattern  (0) 2018.10.26
JAVA 1주차 강의정리  (0) 2018.10.14
4. 상속과 캐스팅  (0) 2018.09.16
3. 캡슐화 방법, 상속  (0) 2018.09.16

댓글