자바 개발환경 / StringBuffer vs StringBuilder / Object 클래스

  • 직접 JAVA 개발 환경 꾸미기
  • JAVA 개발 환경
  • JDK 설치 : JVM 필요 → 실행환경 : JRE : java
  • JRE + 개발 툴 → 개발환경 : JDK

  • 설치 링크
  1. OralceJAVA

Java SE Downloads

  1. OpenJDK

OpenJDK

  • Path 설정 후 버젼 확인

  • 직접 Gradle 설치하기
  • Build Tool : 자동으로 빌드해주고 실행해주는 Tool 필요
  • 등장 배경 : 웹, 앱 프로그래밍 개발의 발전으로 필요한 라이브러리 증가
  • 소스 코드를 컴파일, 테스트, 정적 분석 등을 실행하여 실행 가능한 애플리케이션으로 자동 생성하는 프로그램
  • 계속해서 늘어나는 라이브러리 자동 추가 및 관리
  • 프로젝트를 진행하며 시간이 지남에 따라 라이브러리의 버전을 자동으로 동기화
  • 자바 언어 특화 Build Tool : Ant, Maven, Gradle
  • 장점 : 프로젝트 시작시 설정에 드는 시간을 절약가능

  • 설치 링크

Gradle Build Tool

  • Path 설정 후 버젼 확인

[x] IntelliJ 설치하기

  • IDE(Integrated Development Environment) : 통합 개발 환경
    : 이클립스, 인텔리제이
  • 장점
    1. Gradle, Maven 등의 정형화된 빌드 툴 사용 가능
    2. 라이브러리 추가 등이 가능
    3. 코드 작성 속도가 빨라짐 (유용한 단축키가 많기 때문에)
  • 설치 링크

IntelliJ IDEA: 우수성과 인체 공학이 담긴 JetBrains Java IDE

# 인텔리제이 명령어 정리

빠른 수정 : Alt + Enter 
코드 작성 중 새로운 클래스나 폴더 추가 (커서 변경) : Alt + 1 
 // ESC를 누르면 다시 코드로
Alt + Insert : 클래스 생성
Shift + Shift : 원하는 클래스 찾기
Ctrl + W / Ctrl + Shift + W  블록 확장 or 축소
Ctrl + / : 주석 지정
Ctrl + Alt + L : 코드 Reform (깔끔한 코드 유지)
Shift + Ctrl + Alt + T : 리펙토링 메뉴
Shift + Ctrl + A : 액션 검색 (어디 메뉴인지 모를때 검색해서 사용)

[추가]
자동완성 : ctrl + space
assertions등 라이브러리 import : ctrl + space 2번 + 형광등에서 static import 선택
생성자, getter, setter : getter, setter all 단축키 alt+insert
출력 sout으로 sysout 활용
실행 : ctrl + shift + fn + f10 / 이전에 했던거 바로 실행 : shift +fn + f10
rename, 지정한 변수 위에서 : shift +fn+ f6
주석 : 블럭 주석 - ctrl shift+/
변수 자동 입력 : ctrl + alt + v
리펙토링 메소드 : ctrl + shift + alt + t ==> extract method
==> ctrl+alt+m ==> 해당 부분 메소드 블록 선택 ==> 메소드 이름 지정
만든 로직을 테스트 하는 단축키 : ==> 클래스 위에서 ctrl + shift + t
import 정리 ( 사용하지 않는 import 정리) : ctrl + alt + o 
이전화면으로 화면 바꾸고 싶을떄 : ctrl + E
람다로 변경 : return 쪽에서 alt + enter ==> replace
인라인 (불필요한 코드를 없애는것) : alt + ctrl + enter 
자동 들여 쓰기 : ctrl + alt + l
  • StringBuilder와 StringBuffer 차이점
  • String : 불변의 속성 (새로운 메모리 영역을 가리킴)
    • 단점 : 문자열 추가, 수정, 삭제 등의 연산이 빈번하게 발생하는 경우 힙(Heap) 메모리에 많은 임시 가비지가 생성되어 힙 메모리 부족으로 성능에 영향 미침

  • 따라서 StringBuffer/StringBuilder : 가변의 속성 (기존 메모리 영역을 사용)

  • String & StringBuffer & StringBuilder 차이점

  • StringBuffer & StringBuilder 코드 상 비교

    1. StringBuffer : Thread-Safe (멀티 쓰레드 환경에서 사용)

    2. StringBuilder : Thread-Safe 하지 않음, StringBuffer보다 성능 좋음

      # 전역변수로 StringBuilder를 선언하면 여러 쓰레드에서 동시에 접근하게되고 StringBuilder는 쓰레드에 안전하지 않기 때문에 자연스럽게 문제가 생김
      
      public class Service {
      	static StringBuilder sb = new StringBuilder();
      				public void do() {
      				sb.append("추가");
      				sb.append("추가");
      		}
      }
      # 지역변수로 StringBuilder를 선언하면 쓰레드가 메소드를 수행할 때 객체가 생성되고 쓰레드마다 서로 다른 객체를 사용하게 되요. 그렇기 때문에 멀티쓰레드 환경에서 아래와 같이 코딩을 하여도 전혀 문제가 없고, 문자열 조합이 무지하게 많이 발생하는 경우 StringBuffer를 사용할 때보다 성능상으로 유리
      
      public class Service {
      		public void do() {
      				StringBuilder sb = new StringBuilder();
      				sb.append("추가");
      				sb.append("추가");
      		}
      }

      출처 : https://gofnrk.tistory.com/83

  • 선택 과제 Object Class

  • extends 키워드로 다른 클래스를 상속하지 않으면 기보적으로 java.lang.Object 클래스를 상속

  • Object는 자바의 최상위 부모 클래스에 해당


1. 객체 비교 (equals())

  • public boolean equals (Object Obj) {...}
  • 두 객체 동등 비교할때 equals() 메소드를 사용 (Call by Value)
  • == 연산자는 비교하고자 하는 대상의 주소값을 비교 (Call by Reference)
  • eqauls()는 동일한 객체인지 확인 → 필드값이 동일한지 확인

package com.prgramers.java02;

public class ObjectUse {

    public static void main(String[] args) {

        // Equals
        String aa="aaa";
        String bb=aa;
        String cc=new String("aaa");

        // Equals 확인
        System.out.println(aa.equals(bb)); // 타입, 필드값이 같으므로 True
        System.out.println(aa==bb);        // 가리키는 주소값이 같으므로 True
        System.out.println(aa==cc);        // 주소값이 다르므로 false
        System.out.println(aa.equals(cc));  // 타입, 필드값이 같으므로 True

    }

}
  1. 객체 해시코드 (hashCode())
  • 객체를 식별할 하나의 정수값 (객체의 주소값을 변환)

  • 두 객체가 동일 객체인지 비교할때 사용

  • HasSet, HashMap, Hashtable등 두 객체가 동등한지 비교

  • HashCode()는 String에서 중복 가능성이 있음

    • 31*h+ascii 값의 연산을 하기 때문에 특정 문자열 조합에서 동일한 정수값을 가지는 경우가 존재

      //HashCode
      String a="Z@S.ME";
      String b="Z@RN.E";
      
      System.out.println(a.hashCode()); //-1656719047 
      System.out.println(b.hashCode()); //-1656719047 
    • 하지만 equals()를 통해 key값이 따르기 때문에 Map의 고유 key를 사용할 경우에는 중복되지 않은 값임을 인지

    • eqauls() - False / hasCode() - True : HashMap 다른 Key로 처리

    • eqauls() - True/ hasCode() - False : HashMap 다른 Key로 처리

    • eqauls() - True / hasCode() - True : HashMap 같은 Key로 처리

    1. 객체 문자 정보 (toString())
    • 객체의 문자 정보를 Return

    • 메소드를 재정의하여 사용 (객체의 정보를 알고 싶을 때 사용)

      package com.prgramers.java02;
      
      public class SmartPhone extends Object{
      
          private String company;
          private String os;
      
          public SmartPhone(String company, String os) {
              this.company = company;
              this.os = os;
          }
      
          @Override
          public String toString() {
              return "SmartPhone{" +
                      "company='" + company + '\'' +
                      ", os='" + os + '\'' +
                      '}';
          }
      }
      
      // ToString()
      SmartPhone ph=new SmartPhone("SamSung","and");
      String value=ph.toString();
      System.out.println(value);
profile
BackEnd Developer

0개의 댓글

Powered by GraphCDN, the GraphQL CDN