[네이버 클라우드 캠프-DevOps] 13일차

정지안·2023년 6월 25일
0
post-thumbnail

call stack (호출 스택)

stack(스택) : 밑이 막힌 상자. 위에 차곡차곡 쌓인다.

스택이란?

  • 메서드 수행에 필요한 메모리가 제공되는 공간
  • 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제

<특징>

하나의 스택에서는 하나의 메서드만 실행되고, 나머지 메서드는 대기하게 된다.

기본형 매개변수

  • 기본형 매개변수
    • 변수의 값을 읽기만 할 수 있다.

      <예시>

      예시로 함수내에서 일반적으로 생성하는 지역변수가 있다.

      ex_) 지역변수 x=10;

      고쳐서 사용할 수 있는게 아니라 읽는행위만 한다고 봐야한다.

참조형 매개변수

  • 참조형 매개변수
    • 변수의 값을 읽고 변경할 수 있다.

      <예시>

      예시로 함수 내에서, 메인메서드에서 선언한 인스턴스변수 d에서

      ex_) d.x = 1000;

      를 호출한 것

참조형 반환타입

static 안에 있으면 참조변수는 필요 없다.

같은 클래스내에 있어도 참조변수는 필요 없다.

객체 생성 없이 호출이 가능하다.


인스턴스 메서드

  • 인스턴스 생성 후 , ‘참조변수.메서드이름()’으로 호출
  • 메서드 내에서 인스턴스 변수(iv) 사용 가능

static 메서드(클래스 메서드)

  • 객체 생성 없이 ‘클래스이름.메서드이름()’으로 호출
  • iv를 사용하지 않을 때 static을 붙이자!!
    • 왜냐하면,
    • static은 매개변수를 받기때문에 iv가 필요 없다.
    • 반대로 인스턴스메서드는 인스턴스변수 iv가 있기때문에 매개변수가 필요없다.
  • 메서드 내에서 인스턴스 변수(iv) 사용 불가

Q. static 메서드는 static메서드 호출 가능?

A. 네

Q. static메서드는 인스턴스 변수 사용 가능?

A. 아니오.

Static메서드는 객체 생성 여부와 관계 없이 호출이 가능하다.

반면에, 인스턴스 변수는 객체 생성 후 호출이 가능하다.

따라서 Static메서드 안에 인스턴스변수를 객체생성 없이 넣는다면 에러가 난다.(객체 생성을 해야되니까)

Q. 왜? static 메서드는 인스턴스 멤버를 쓸 수 없나요?

A. static 메서드 호출시 객체(iv묶음)이 없을 수도 있어서.


상속 : is-a

부모의 변경은 자손에 영향을 미치나,

자손의 변경은 조상에 영향을 미치지 않는다.

포함 : has-a

  • 클래스의 멤버로 참조변수를 선언하는 것!

단일 상속

Java는 단일 상속만을 허용한다.

따라서, 비중이 높은 클래스 하나만 상속관계. 나머지는 포함관계.

Object 클래스 : 모든 클래스의 조상

  • 부모가 없는 클래스는 자동적으로 Object클래스를 상속받게 된다.(컴파일러가 자동추가)

toString()

  • “클래스이름@객체주소값”
  • println 안에 참조변수가들어오면, toStirng을 내부적으로 호출한다.
    public class InheritanceTset{
    public static void main(String[] args) {
        Circle c = new Circle();
        System.out.println(c.toString); // "Circle@15db9742"
        System.out.println(c); // "Circle@15db9742"
        }
    }

equals(Object obj)

hashCode()

오버라이딩

  • 상속받은 조상의 메서드를 자신에 맞게 변경하는 것

<실행조건>

  • 선언부(반환타입, 메서드이름, 매개변수 목록)가 조상 클래스 메서드와 일치해야한다.
  • 접근제어자를 조상클래스 메서드보다 좁은 범위로 변경할 수 없다.
    1c0-b1bc-4f4b-81ef-5ae62c3a02ab/Untitled.png)

참조변수 super

  • 객체 자신을 가리키는 참조 변수. 인스턴스 메서드(생성자) 내에서만 존재.
  • 즉, static내에서 사용 불가.
  • 조상 멤버와 자신 멤버를 구별할 때 사용한다.
    • ⇒ 조상의 변수를 나타내고자 하고 사용

this랑 비슷하다.

⇒지역변수와 인스턴스변수를 구별할 때 사용

super() - 조상의 생성자

부모와 자식의 메서드 이름이 x로 같다면,

자손의 생성자 메서드를 만들 때 부모의 생성자메서드를 호출해야한다.

그러기 위해 super()를 쓴다.

  • 조상의 생성자를 호출할 때 사용
  • 조상의 멤버는 조상의 생성자를 호출해서 초기화
  • 생성자(초기화)는 상속이 안된다.
  • 자손의 생성자는 자기가 선언한 것만 초기화하자.
  • 생성자의 첫 줄에 반드시 생성자를 호출해야 한다.
  • 그렇지 않으면 생성자의 첫 줄에 super();를 삽입.


bin으로이동해야 클래스를 열수있다.(패키지루트. 패키지 시작폴더의 상위 폴더.)

class path

cmd

java com.codechobo.bookPackageTest

import문 ( ctrl + shift + O )

  • 클래스를 사용할 떄 패키지 이름을 생략할 수 있다.
  • 컴파일러에게 클래스가 속한 패키지를 알려준다.

기본이 되는 패키지

  • java.lang패키지
    • String
    • Object
    • System
    • Thread

import문 작성방법

import 패키지명.클래스명;

혹은

import 패키지명.*; //모든 클래스

import java.util.*; //자바 유틸 패키지의 모든 클래스

import java.*;// 자바패키지의 모든 클래스(패키지는 포함 안됨)

import static 문

  • static 멤버를 사용할 때 클래스 이름을 생략할 수 있게 해준다.

|

import 관계

import static java.lang.Integer.*;	//Integer클래스의 모든 static메서드
import static java.lang.Math.random;//Math.random()만 괄호 안붙임.
import static java.lang.System.out; //System.out을 out만으로 참조 가능

System.out.println(Math.random());

⇒ out.println(random());

제어자 ( modifier ) =형용사같은 것.

  • 클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미

제어자의 종류

접근제어자

  • public
  • protected
  • default
  • private

그외

  • static
  • final
  • abstract
  • native
  • transient
  • synchronized
  • volatile
  • strictfp

static

아래 요소 앞에 붙을 수 있다.

  • 멤버변수

  • 메서드

  • iv 앞에 static 붙으면 cv가된다

간단초기화, 복잡초기화 수행할 때 쓴다.

간단초기화

static in width = 200;

복잡초기화

static{

}

static변수 내에서는 iv와 instance메서드 사용할수없다.

왜냐하면, iv는 객체를 만들고 나서 쓸 수 있기 때문













profile
1% 개발자를 향해:: 개발 공부 일지를 써나갑니다

0개의 댓글