반응형

1. 로그 레벨 출력이 불가하다.

  • 로깅 프레임워크처럼 개발환경에 따른 로그 레벨을 설정할 수 없다.(Logback의 로그레벨 : TRACE, DEBUG, INFO, WARN, ERROR, FATAL)
  • 그렇기 떄문에 각 환경마다 로그 설정이 불가하다.
  • 예를 들면, 프로덕션 환경에서 디버그 레벨의 로그를 제거하고 싶은 경우 코드를 통해 일일히 제거해야한다.
      

2. 로그에 필요한 최소한의 정보가 없다.

  •  System.out.println은 단순히 문자열을 찍는 메서드여서, 로깅시 필요한 날짜, 시각, 문제의 수준, 위치 등의 정보를 따로 표시할 수 없다.

 

3. 휘발성

  • System.out.println은 표준 출력으로만 사용되고, 따로 기록되지 않는다. 로그 파일로서 관리가 불가하여 사후 처리시, 로그를 확인할 수 없다.

 

3. 성능저하

  •  단순 디버깅 용도여도 System.out.println을 사용하지 않는 이유는 성능 저하 때문이다.
  • println은 synchronized로 동기화 처리가 되어있어, 오버헤드가 발생할 수 있다.
  • synchronized는 메서드나 블록 코드에 동기화 영역을 표시하는 것으로, 동기화된 불록은 한 시점에 1개의 스레드만 접근이 가능
  • System.out.println() 메서드를 여러 스레드가 사용하게 된다면 오버헤드가 발생하여 프로세스 처리가 늦어지게 될 수 있다. (* 오버헤드(Overhead) : 어떤 처리를 하기 위해 추가로 들어가는 처리 시간, 메모리 등의 컴퓨터 자원을 말합니다.)
  • Blocking I/O
      

cf. 코딩 테스트시에 System.out.println을 사용하여 출력하면 시간초과가 발생할 수 있다.

 

15649번: N과 M (1)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

References

 

 

로깅을 System.out.println() 로 하면 안되는 이유

학습 배경 우테코 레벨3 팀프로젝트 3차 데모데이 요구사항 중 하나는 ‘디버깅할 수 있는 로그 파일 출력’ 이다. 이전까지는 로깅에 대해 전혀 신경쓰지 않고 있었는데, 슬슬 로깅에도 신경써

hudi.blog

 

'개발 > Java' 카테고리의 다른 글

String, StringBuilder, StringBuffer  (0) 2022.12.13
[Java] Garbage Collection(가비지 컬렉션)  (2) 2022.12.02
equals()  (0) 2022.11.30
[자바/JAVA] 정적 변수와 메서드 (static)  (0) 2021.06.25
[자바/JAVA] this  (0) 2021.06.24
반응형

1. String, StringBuilder, StringBuffer
 - String은 상수이며, 값을 만든 뒤 변경할 수 없다 (Immutable)
 - String 클래스의 한계 (불변객체 > immutable)
  > immutable(불변)한 특성으로 인해 문자열 변경시 메모리 낭비가 발생 (이전 문자열은 GC에 의해 제거) 
  > 문자열을 변경할 때마다 새로운 메모리가 할당됨
 - StringBuffer와 StringBuilder는 String과는 다르게 변형 가능(mutable)하고, 내부적으로 배열의 형태로 
   선언되기 때문에 문자열 처리 후 새로운 인스턴스가 할당되는 것이 아닌 기존의 객체에 이어 붙인다. 
   따라서 훨씬 속도도 빠르고 공간의 낭비도 적다.

2. StringBuilder
 - 문자열을 변경하거나 이어붙이는 경우 추가 메모리 생성없이 기존 문자열이 변경되는 클래스 (가변객체 > mutable)
 - 멀티 쓰레드 환경에서 문자열의 안전한 변경을 보장해주지 않는다. (여러 쓰레드가 동시에 접근/변경하는 경우 수행결과가 올바르지 않음)

3. StringBuffer
 - StringBuilder와 마찬가지로 문자열을 이어붙이는 경우 추가 메모리 생성없이 기존 문자열이 확장되는 클래스 (가변객체 > mutable)
 - StringBuffer는 멀티쓰레드 환경에서 문자열의 안전한 변경을 보장한다. (두 쓰레드가 동시에 문자열에 접근하더라도 안전한 변경을 보장)

4. StringBuilder와 StringBuffer의 차이
 - 동기화 : StringBuffer는 동기화 기능 지원, StringBuilder는 동기화 미지원이지만 단일 쓰레드에서는 StringBuffer보다 빠르다.
 - 언제 어느걸 써야할까?
  > StringBuilder : 싱글 쓰레드 환경에 적합, 스레드가 안전한 프로그램이거나 오류가 나도 큰 이슈가 없고 성능이 중요한 경우
    > StrngBuffer : 멀티 쓰레드 환경에 적합, 연산이 많을 경우 유리

5. 성능 차이 (String vs StringBuilder vs StringBuffer)
 - 3개의 성능을 비교해보면 StringBuilder > StringBuffer > String 순으로 StringBuilder가 제일 빠름
 - 싱글 쓰레드인 경우 StringBuilder와 StringBuffer의 성능 차이 > StringBuilder가 연산속도가 빠르다
 
* 참고
 - https://life-with-coding.tistory.com/485
 - https://blog.neonkid.xyz/286

'개발 > Java' 카테고리의 다른 글

System.out.println() 사용 안하는 이유  (0) 2022.12.14
[Java] Garbage Collection(가비지 컬렉션)  (2) 2022.12.02
equals()  (0) 2022.11.30
[자바/JAVA] 정적 변수와 메서드 (static)  (0) 2021.06.25
[자바/JAVA] this  (0) 2021.06.24
반응형

1. CONNECT BY LEVEL 이란?

  • 계층형 쿼리로 연속적으로 증가하는 값이 필요로 할 때 사용하는 쿼리

2. 예제

  • 1 - 10 까지 연속된 숫자 조회
 SELECT LEVEL AS NO
   FROM DUAL
CONNECT BY LEVEL <= 10;
  • 2022년 1월부터 12월까지 출력
 SELECT '2022년'||LPAD(LEVEL,2,0)||'월' AS NO
   FROM DUAL
CONNECT BY LEVEL <= 12;
  • 특정 날짜 구간 조회하기 (2022/07/01 ~  2022/07/17)
WITH WD AS 
(
     SELECT TO_DATE('20220701', 'YYYYMMDD') AS FROM_DT
          , TO_DATE('20220717', 'YYYYMMDD') AS TO_DT
       FROM DUAL
) 
SELECT DT
     , DT2
  FROM (SELECT TO_CHAR(FROM_DT+(LEVEL-1), 'YYYYMMDD') AS DT
             , TO_CHAR(FROM_DT+(LEVEL-1), 'YYYYMMDD') AS DT2
          FROM WD
       CONNECT BY LEVEL <= (TO_DT - FROM_DT) + 1)

 

3. 참고 문제

https://school.programmers.co.kr/learn/courses/30/lessons/59413

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

References

https://loveuceci.tistory.com/1226

 

오라클 계층쿼리 CONNECT BY LEVEL 사용법

오라클 계층쿼리 CONNECT BY LEVEL 사용법 CONNECT BY LEVEL 쿼리는 계층형 쿼리로 오라클에서 값을 연속적으로 증가하는 값이 필요로 할 때 사용됩니다. 고급 쿼리에서도 많이 사용되는데요. 쉽게 풀어

loveuceci.tistory.com

https://meyouus.tistory.com/175

'개발 > Database' 카테고리의 다른 글

[SQL 오류] -SQLException  (0) 2018.06.11
반응형
  1. BFS
    • https://www.acmicpc.net/problem/1926
      • 큐에 ADD 할때, 방문처리
      • 큐에서 POP 할때 카운트 처리
  2. 백트래킹

'개발 > 코딩 테스트' 카테고리의 다른 글

[코딩테스트] 자주 틀리는 부분 정리  (0) 2023.05.17
반응형

1. GC 란?

  • JVM의 Heap 영역에서 사용하지 않는 객체의 메모리를 자동으로 수거하는 기능

 

2. GC의 수거대상

  • Heap 영역에는 Object 타입의 데이터(String, List 등)들이 들어가는데, GC Roots에 UnReachable한 Object가 대상
  • 어떤 객체의 참조가 존재한다면 Reachable, 그렇지 않다면 UnReachable이라고 한다.
  • GC Root에서 시작해 이 Root가 참조하는 모든 오브젝트, 또 그 오브젝트들이 참조하는 다른 오브젝트들을 탐색해 내려가며 마크(Mark)한다.이 탐색해 내려가며 마크하는 것을 Mark단계라고 한다. (Reachable 한 Object)
  • 마크(Mark)되지 않은 객체 (UnReachable한 Object)
  • GC Roots 란?  GC Root들은 힙 외부에서 접근할 수 있는 변수나 오브젝트
    • 실행중인 쓰레드 (Active Thread) 
    • 정적 변수 (Static Variable) 
    • 로컬 변수 (Local Variable) 
    • JNI 레퍼런스 (JNI Reference)

3. GC의 동작순서 (Mark &Sweep)

  • Mark > GC Roots로부터 모든 변수를 스캔하면서 각각 어떤 객체를 참조하는지 찾아서 마킹하는 작업
  • Sweep > 마킹되지 않은 UnReachable한 객체들을 Heap에서 제거하는 작업
  • Compact > Sweep 후에 분산된 객체들을 Heap의 시작주소로 모아 메모리가 할당된 부분, 그렇지 않은 부분으로 나눈다. (메모리 단편화 방지)

 

4. Heap 영역 구조

  • Young Generation (새로운 객체들이 할당되는 영역)
    • Eden
    • Survivor0
    • Survivor1
  • Old Generation (Young Generation에서 오랫동안 살아남은 객체들이 존재하는 영역)
  • meta space (가비지 컬렉션 시에 필요한 클래스와 메소드의 요약 정보가 존재하는 영역)

 

5. GC 동작 과정

  1. 새로운 객체들이 Eden 영역에 할당
  2. Eden 영역이 꽉 찬다
  3. Minor GC 발생 (Mark&Sweep)
    1. Mark > Reachable 한 객체들을 마킹
    2. Reachable 한 객체들은 Survivor 영역으로 이동  (Survivor0 또는 Survivor1 > 한 곳으로만 이동 가능)
    3. UnReachable 한 객체들은 Sweep 처리
    4. Survivor 영역에 있는 살아남은 객체들의 age가 증가한다. (Aging)
  4. 다시 Eden 영역이 꽉 차고, Minor GC가 발생 반복 (1~3번)
  5. 객체 age가 임계점에 도달하면 Old Generation으로 이동한다 (Promotion)
  6. Old Generation이 꽉 차면 Major GC가 일어난다.

 

6. GC 특징

1. stop - the-world

  • GC를 실행하기 위해 jvm이 애플리케이션 실행을 멈추는 것
  • GC를 실행하는 쓰레드 외의 모든 쓰레드가 작업을 중단한다.

2. Minor GC와 Major GC로 나뉘어져 있는 이유 (성능 최적화)

  • 대부분의 객체는 금방 접근 불가능한 상태(unreachable)가 된다. 즉, 금방 garbage가 된다.
  • 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.
  • 보통 Minor GC에서 객체들이 수거됨. 빈번하게 발생해도 괜찮도록 구성 (Eden, Survivor)
  • Major GC에서 수거되는 객체들은 미비함.

7. GC의 종류

  • Serial GC
    • GC를 처리하는 쓰레드가 1개
    • 다른 GC에 비해 stop-the-world 시간이 길다.
    • Mark-Complete(Sweep포함) 알고리즘 사용
  • Parallel GC
    • Java8의 default GC.
    • Young 영역의 GC를 멀티 쓰레드로 수행
    • Serial GC에 비해 stop-the-world 시간 감소
  • Parallel GC
    • Parallel GC를 개선
    • Old 영역에서도 멀티 쓰레드 방시의 GC 수행
    • Mark-Summary-Compact 알고리즘 사용
  • CMS GC (Concurrent Mark Sweep)
    • stop-the-world 시간을 줄이기 위해 고안됨
    • compact 과정이 없음

 

References

 

[JAVA] 자바 가비지 컬렉션 , Java Garbage Collection #GC

자바 가비지 컬렉션 , Java Garbage Collection 안녕하세요? 장장스입니다. 자바의 GC에 대해 정리해보겠습니다. GC (Garbage Collection) 자바 어플리케이션은 JVM에 의해 구동이 됩니다. GC(Garbage Collection)는 JVM

zangzangs.tistory.com

 

'개발 > Java' 카테고리의 다른 글

System.out.println() 사용 안하는 이유  (0) 2022.12.14
String, StringBuilder, StringBuffer  (0) 2022.12.13
equals()  (0) 2022.11.30
[자바/JAVA] 정적 변수와 메서드 (static)  (0) 2021.06.25
[자바/JAVA] this  (0) 2021.06.24
반응형

자바의 최상위 클래스인 Object 클래스에는 여러가지 native 메서드가 존재하는데

그 중 equals()에 대해 알아보고자 한다.

 

1. equals() 란?

Object 클래스에서는 단순히 "동일한" 객체인지 비교. (동일성)

public boolean equals(Object obj) {
    return (this == obj);
}

equals() 는 보통 하위 클래스에서 재정의하여 사용하는데, 보통 "동등성"을 비교.

 

대표적인 예시로, String 클래스의 equals() 들 수 있다.

String의 equals()는 문자열을 비교하기 위해, 해당 문자열의 "내용"을 비교하도록 재정의 되어있다.

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

 

2. == 연산자와의 차이점

"==" 연산자는 primitive type에 대해서는 값을 비교, reference type에 대해서는 주소값을 비교한다.

사실 primitive type에서도 Constant Pool에 있는 특정 상수값을 참조하는 것이기 때문에, 결국 주소값을

비교하는 연산자라고 볼 수 있다.

 

Object의 equals()와 동일한 기능을 하고 있다고 볼 수 도 있다.

다만 == 연산자의 경우 재정의하여 사용하지 않고, 오직 동일성 비교를 위해서 사용된다고 보면된다.

 

다음 예제로 == 연산자와 String 클래스의 equals() 메서드를 비교해보자.

public class Main {
    public static void main(String[] args) {
        String str1 = "apple";
        String str2 = new String("apple");

        System.out.println(str1.equals(str2)); // true
        System.out.println(str1 == str2); // false
    }
}

 

내부 값 자체를 비교하도록 재정의 되어있는 String 클래스의 equals() 같은 경우,

리터럴 방식으로 선언된 str1과 new로 선언된 str2의 주소값이 다르더라도, 같은 문자열이기 때문에 true가 반환된다.

 

== 연산자의 경우, str1과 str2의 주소값 자체를 비교하므로 false를 반환하게 된다.

반응형

디지털 ARS 관련 업무 프로세스 분석 중 온라인 결제 방식인 인증/비인증 결제에 대한 부분을 정리하고자 한다.

 

1. 인증결제

 1.1) 인증결제란?

    고객이 직접 보안 및 금융 프로그램을 통해 카드 또는 휴대폰 번호 등 본인의 정보를 입력을 통해

    인증을 진행하고 결제하는 방식

 

 1.2) 장단점

   - 장점

       > 비교적 높은 안정성 및 신뢰성

       > 고객이 직접 인증 후, 결제하기 때문에 사업자의 법적인 책임이 비교적 덜함

 

   - 단점

       > 고객 입장에서 보안 프로그램 설치 등 결제 절차가 복잡함

       > 구매도달률이 상대적으로 낮다.

 

 1.3) 종류

   - 온라인 PG : 카드사와 PG사(결제대행사)를 통해 온라인 '비대면인증결제'를 할 수 있도록 하는 솔루션

       > 종류: 나이스페이, 이니시스, 다우페이 등

 

2. 비인증결제

 2.1) 비인증 결제란?

    - 비인증결제 솔루션을 통해 고객의 카드번호 및 카드 날짜를 입력하거나 등록해놓고 결제를 진행하는 방식으로

      고객의 별도 인증 없이 결제를 요청하는 방식을 통칭

 

 2.2) 장단점

   - 장점 (=인증 결제의 단점)

       > 간편하다.

       > 구매도달률이 높다.

 

   - 단점 

       > 보안상 이슈가 발생할 확률이 높음.

       > 사업자의 법적인 책임이 상대적으로 크다.

 

 2.3) 종류

   - 정기/구독 결제 : 최초 등록된 결제정보로 "반복" 결제가 이루어지는 방식  ex) 넷플릭스, 유튜브 프리미엄 등

       * 정기적으로 같은 일자에 결제가 되는 방식이 아닌 등록된 결제정보로 재결제가 되는 방식도 정기/구독 결제에

         포함됨  ex) 카카오 택시, 따릉이 등

 

   - 키인(수기) 결제 : 구매자 인증 없이 카드번호 입력만으로 결제되는 방식 (일회성)  ex) CGV, 코레일, ARS 결제 등

 

4. 정리

 디지털 ARS가 모바일 화면을 통해 고객에게 노출이 되고, 모바일에서는 인증 결제를 통해 결제를 진행하고 있어

 인증 결제로 진행해도 무리는 없어 보이나, 타사 보이는 ARS 사례나(SK스토아) ARS 특성(간편함)을 생각한다면

 간편 결제로 진행하는 것이 맞는 것으로 판단된다.

반응형

전체적인 흐름

1) 브라우저에 검색창에 'www.google.com'을 입력 후. 엔터를 친다.

  • 특정 웹사이트에 접속하기 위해서는 'www.google.com' 과 같은 도메인(Domain)이 아닌 '127.0.0.1'과 같은 IP 주소가 필요하다.
  • 하지만 IP 주소는 외우기가 힘들고, 가독성이 떨어지기 때문에 도메인 명으로 웹페이지에 접속할 수 있도록 DNS 서버를 이용한다.
  • DNS는 Doman Name System의 약자로 URL의 이름과 IP주소를 저장하고 있는 데이터베이스이다. (like 전화번호부)

 

2) 브라우저는 캐싱된 DNS 기록을 체크한다.

  • 브라우저는 4가지 캐시를 확인한다. (Browser캐시 >OS 캐시 (systemcall) > router 캐시 > ISP 캐시
  • 캐시는 네트워크 트랙픽 조절과 데이터 전송 시간을 줄여준다.
  • ISP는 인터넷 서비스 공급자의 약자이다. ex) SK, LG, KT 등

 

3) 요청한 URL이 캐시에 없으면, ISP의 DNS 서버에서 다른 DNS 서버를 DNS Query를 통해 검색하여 IP 주소를 찾는다.

  • 캐시에 요청한 URL의 IP 정보가 없으면, ISP는 DNS 서버들을 검색해 해당 도메인의 IP 주소를 검색한다.
  • 해당 검색기법을 recursive search라 부르며, IP 주소를 찾을 때까지, DNS 서버에서 다른 DNS 서버를 오가면서 반복 검색을 진행한다.

 

4) 브라우저가 서버와 TCP connection을 한다.

  • 브라우저가 IP 주소를 얻게되면 서버와 http connection을 통해 서버와 연결을 한다.
  • HTTP 연결의 경우 대표적인 인터넷 프로토콜인 TCP를 일반적으로 사용한다.
  • TCP/IP three-way handshake라는 프로세스를 통해서 클라이언트와 서버간 connection이 이뤄지게 된다. 

 

 

5) Browser가 웹서버에 HTTP 요청을 한다.

  • TCP 연결이 되면, 데이터 전송을 하면된다.
  • 클라이언트는 GET 요청을 통해 서버에서 'www.google.com' 웹페이지를 요구한다.
  • 요청에 따라 부가적인 정보들이 함께 전송되는데 개발자 도구의 network에서 자세한 내용을 확인할 수 있다.

 

 

6) 서버가 요청을 처리하고, response를 생성한다.

  • 서버가 가지고 있는 웹서버에서 브라우저로부터 온 요청을 읽고 response를 생성한다.
  • response를 특정한 포맷(JSON, XML, HTML)으로 작성한다.

 

 

7) 서버가 HTTP Response를 보낸다.

  • 서버의 response에는 요청한 웹페이지, 상태코드, 쿠키, 개인정보 등이 포함되어있다.

 

 

8) 브라우저가 HTML content를 보여준다.

  • 브라우저는 html content를 단계적으로 렌더링 하여 노출한다.
  • 해당 contents 들은 브라우저에 의해 캐싱되어 나중에 해당 페이지 재방문시 서버에 재요청하지 않도록 한다.
  • 그 이후, 'www.google.com' 웹 페이지가 노출된다.

 

 

 

전체적인 흐름은 이해가 되는데 세부적인 내용은 이해가 가지 않는다. 네트워크 기초 공부를 조금 더 해야할 거 같다..

 

 

 

* 참고: https://devjin-blog.com/what-happen-browser-search/

 

[번역] Browser에 www.google.com을 검색하면 어떤 일이 일어날까?

What happens when you type an URL in the browser and press enter…

devjin-blog.com

 

 

* 본문 원문: What happens when you type an URL in the browser and press enter? 

반응형

 * 기본 인터넷 통신 지식

 1) IP (인터넷 프로토콜)

   - 지정한 IP 주소(IP Address)에 데이터 전달

   - 패킷(Packet) 이라는 통신 단위로 데이터 전달

 

   * IP 프로토콜의 한계

      - 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송

      - 비신뢰성 : 중간에 패킷이 사라지는 경우, 패q킷이 순서대로 안오는 경우

      - 프로그램 구분 : 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상인 경우

      

      > IP 프로토콜 한계 보완 -> TCP, UDP

 

 - TCP, UDP

 - PORT

 - DNS

반응형

1. 정적(static) 멤버란?

 - Static변수와 Static메소드를 합쳐 정적 멤버라고 한다. (또는 클래스 멤버)

 - 클래스에 소속된 멤버로 인스턴스 생성 여부에 상관없이 모든 인스턴스에서 공통으로 사용한다.

 

2. 정적(static) 멤버 특징

 - Static 키워드를 통해 생성된 정적 멤버들은 Heap 영역이 아닌 Static 영역에 할당된다.

 - Static 영역에 할당된 메모리는 인스턴스 생성과는 별개로 모든 객체가 공유하여 사용할 수 있는 장점이 있다.

   (Gabage Collector의 관리 영역 밖에 존재하기 때문에 Static을 남발하게 되면 시스템 성능에 문제가 생길 수 있다.)

 

3. 정적(static) 멤버 vs 인스턴스 멤버

 - 필드 혹은 메서드 생성시 정적으로 생성할 것인지, 인스턴스로 생성할 것인지에 대한 판단 기준은 공용으로 사용

   하느냐 아니냐로 판단하면 된다.

 

4. 정적(static) 멤버 사용 예시

 - 정적 필드

class Number{
    static int num = 0; //클래스 필드
    int num2 = 0; //인스턴스 필드
}

public class Static_ex {
	
    public static void main(String[] args) {
    	Number number1 = new Number(); //첫번째 number
    	Number number2 = new Number(); //두번쨰 number
    	
    	number1.num++; //클래스 필드 num을 1증가시킴
    	number1.num2++; //인스턴스 필드 num을 1증가시킴
    	System.out.println(number2.num); //두번째 number의 클래스 필드 출력
    	System.out.println(number2.num2); //두번째 number의 인스턴스 필드 출력
    }
}

 

- 정적 메서드 (정적 메소드는 유틸리티 함수를 만드는데 유용하게 사용)

class Name{
    static void print() { //클래스 메소드
	System.out.println("내 이름은 홍길동입니다.");
    }

    void print2() { //인스턴스 메소드
	System.out.println("내 이름은 이순신입니다.");
    }
}

public class Static_ex {
	
    public static void main(String[] args) {
        Name.print(); //인스턴스를 생성하지 않아도 호출이 가능
    	
        Name name = new Name(); //인스턴스 생성
        name.print2(); //인스턴스를 생성하여야만 호출이 가능
    }
}

 

 

참고) https://coding-factory.tistory.com/524

'개발 > Java' 카테고리의 다른 글

String, StringBuilder, StringBuffer  (0) 2022.12.13
[Java] Garbage Collection(가비지 컬렉션)  (2) 2022.12.02
equals()  (0) 2022.11.30
[자바/JAVA] this  (0) 2021.06.24
[자바/JAVA] 생성자와 초기화  (0) 2021.06.23

+ Recent posts