기본형(primitive type)

  - 정수타입 : byte, short, int, long

  - 실수타입 : float, double

  - 문자타입 : char

  - 논리타입 : boolean

 

참조형(reference type)

  - 배열 타입

  - 열거 타입

  - 클래스

  - 인터페이스

  - 기본형을 제외한 나머지

 

기본형 vs 참조형 - 변수 대입

대원칙 : 자바는 항상 변수의 값을 복사해서 대입한다.

- 기본형 : 변수에 들어 있는 실제 사용하는 값을 복사해서 대입

- 참조형 : 변수에 들어 있는 참조값을 복사해서 대입

// 기본형 변수 대입
int a = 10;
int b = a;

System.out.println("a = " + a); // 10
System.out.println("b = " + b); // 10

b = 20;

System.out.println("a = " + a); // 10
System.out.println("b = " + b); // 20



// 참조형 변수 대입
Student student1 = new Student();
student1.name = "kim";
Student student2 = student1;

System.out.println("student1.name = " + student1.name); // kim
System.out.println("student2.name = " + student2.name); // kim

student2.name = "Lee";

System.out.println("student1.name = " + student1.name); // Lee
System.out.println("student2.name = " + student2.name); // Lee

 

 

기본형 vs 참조형 - 메서드 호출

대원칙 : 자바는 항상 변수의 값을 복사해서 대입한다.

- 기본형 : 메서드로 기본형 데이터를 전달하면 해당 값이 복사되어 전달됌.

- 참조형 : 메서드로 참조형 데이터를 전달하면 참조값이 복사되어 전달됌.

// 기본형 메서드 호출
public static void main(String[] args) {
    int a = 10;
    System.out.println("a = " + a); // 10
    changePrimitive(a);
    System.out.println("a = " + a); // 10

}

static void changePrimitive(int x) {
    x = 20;
}

// 참조형 메서드 호출
public static void main(String[] args) {
    Student student = new Student();
    student.name = "kim";
    System.out.println("student.name = " + student.name); // kim
    changeReference(student);
    System.out.println("student.name = " + student.name); // Lee

}

static void changeReference(Student data) {
    data.name = "Lee";
}

 

'인강 > 자바(기본편)' 카테고리의 다른 글

다형성  (0) 2024.07.23
상속  (0) 2024.07.22
this, 생성자  (0) 2024.07.02
변수와 초기화  (0) 2024.07.02
클래스와 데이터  (0) 2024.07.01

클래스(class)

- 클래스에 정의한 변수들을 멤버 변수, 필드라고 한다.

  - 멤버 변수(Member Variable) : 클래스 영역에서 선언된 변수

  - 필드(Field) : 데이터 항목을 가리키는 용어(데이터베이스, 엑셀 등에서 각각의 항목을 지칭)

public class Student {
    String name; // 멤버 변수, 필드
    String grade; // 멤버 변수, 필드
}

 

인스턴스 생성

Student student; // 1. 변수 선언
student = new Student(); // 2. 인스턴스 생성
student = x001 // 3. 참조값 보관및 반환

객체(Object) : 클래스에서 정의한 속성과 기능을 가진 실체

인스턴스(Instance) : 특정 클래스로부터 생성된 객체를 의미함

'인강 > 자바(기본편)' 카테고리의 다른 글

다형성  (0) 2024.07.23
상속  (0) 2024.07.22
this, 생성자  (0) 2024.07.02
변수와 초기화  (0) 2024.07.02
기본형 vs 참조형  (0) 2024.07.01

String 클래스를 통해 문자열 생성 방법

- String 클래스는 기본형이 아니라 참조형이다.

- 문자열은 매우 자주 사용되어 자바 언어에서는 아래 1번과 같이 작성해도 new String("hello")와 같이 변경해준다.

1. String str1 = "hello";
2. String str1 = new String("hello");

 

String 클래스 - 비교

동일성(Identity) : == 연산자를 사용해서 두 객체의 참조가 동일한지 확인

동등성(Equality) : equals() 메서드를 사용하여 두 객체가 논리적으로 같은지 확인

String str1 = "hello";
String str2 = new String("hello");
String str3 = new String("hello");

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

 

문자열 풀

- String str = "hello"와 같이 문자열  리터럴을 사용하는 경우 자바는 메모리 효율성과 최적화를 위해 풀을 사용한다.

- 자바가 실행되는 시점에 문자열 리터럴이 있으면 문자열 풀에 String 인스턴스를 만들어둔다.

- 같은 문자열이 있으면 String 인스턴스를 만들지 않고 동일한 문자열에 인스턴스를 찾고 해당 인스턴스를 참조한다.

String str1 = "hello";
String str2 = "hello";

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

불변 객체

1. 변경이 필요한 경우 기존 값을 변경하지 않고 새로운 결과를 만들어서 반환한다.

2. String 내부의 값을 변경할 수 있다면 기존에 문자열 풀을 통해 같은 문자를 참조하는 변수의 String값이 변경되는 문제가 생길 수 있음

// 1번 예제
String str1 = "hello";
str1.concat("java");
String str2 = str1.concat(" java");

System.out.println("str1 = " + str1); // hello
System.out.println("str2 = " + str2); // hello java

// 2번 예제
String str3 = "hello";
String str4 = "hello";
str2 = "bye";

System.out.println("str3 = " + str3); // hello
System.out.println("str4 = " + str4); // bye

 

StringBuilder 가변 String

- 내부의 값을 변경할 수 있는 String

- 변경된 값을 사용할때 불변 객체와 다르게 새로운 객체를 생성하지 않는다.

- 내부의 값을 변경할때마다 새로운 객체를 생성하는게 아니기 때문에 성능과 메모리 측면에서 효율적이다.

불변 객체 값 변경

// 문자열 변경시 동작 순서
String str = String("A") + String("B") + String("C") + String("D");

// 1
String str = new String("AB") + String("C") + String("D");

// 2
String str = new String("ABC") + String("D");

// 3
String str = new String("ABCD");

- 1번과 2번에서 생성된 new String("AB")과 new String("ABC")은 사용되지 않는다.
- 이후에 GC의 대상이 된다.

가변 객체 값 변경

 StringBuilder sb = new StringBuilder();
 
 sb.append("A");
 sb.append("B");
 sb.append("C");
 sb.append("D");
 
 System.out.println("sb = " + sb); // ABCD

 

'인강 > 자바(중급1편)' 카테고리의 다른 글

불변 객체  (0) 2024.05.06
Object 클래스  (0) 2024.04.23

기본형과 참조형

기본형 : 하나의 값을 여러 변수에서 절대로 공유하지 않는다.

참조형 : 하나의 객체를 참조값을 통해 여러 변수에서 공유할 수 있다.

int a = 10;
int b = a;

System.out.println("a : " + a); // 10
System.out.println("b : " + b); // 10

b = 20;

System.out.println("a : " + a); // 10
System.out.println("b : " + b); // 20

Address addressA = new Address("seoul");
Address addressB = addressA;

System.out.println("addressA : " + addressA.getAddress()); // seoul
System.out.println("addressB : " + addressB.getAddress()); // seoul

addressB.setAddress("busan");

System.out.println("addressA : " + addressA.getAddress()); // busan
System.out.println("addressB : " + addressB.getAddress()); // busan

 

사이드 이펙트(Side Effect)

특정 부분에서 발생한 변경이 예상치 못한 다른 부분에 영향을 미치는 경우

// addressB의 값만 바꾸기를 원했지만 addressA값도 변하는 경우

Address addressA = new Address("seoul");
Address addressB = addressA;

System.out.println("addressA : " + addressA.getAddress()); // seoul
System.out.println("addressB : " + addressB.getAddress()); // seoul

addressB.setAddress("busan");

System.out.println("addressA : " + addressA.getAddress()); // busan
System.out.println("addressB : " + addressB.getAddress()); // busan

불변객체(Immutable Object)

- 객체 생성 이후 내부의 상태가 변하지 않는 객체

- 필드의 값을 final로 선언

- setter를 구현하지 않음

public class ImmutableAddress {

    private final String value; // final 사용

    public ImmutableAddress(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
    
    // setter 구현 X
    
}

 

'인강 > 자바(중급1편)' 카테고리의 다른 글

String 클래스  (0) 2024.05.15
Object 클래스  (0) 2024.04.23

java.lang 패키지

- lang은 Language의 줄임말이다

- 자바 언어를 이루는 가장 기본이 되는 클래스들을 보관하는 패키지이다

- 모든 자바 애플리케이션에서 자동으로 임포트 되어 있어서 임포트 구문을 작성하지 않아도 된다.

java.lang 패키지의 대표적인 클래스들

Object : 모든 자바 객체의 부모 클래스

String : 문자열

Integer , Long , Double : 래퍼 타입, 기본형 데이터 타입을 객체로 만든 것

Class : 클래스 메타 정보

System : 시스템과 관련된 기본 기능들을 제공

 

Object 클래스

- 모든 클래스의 최상위 부모 클래스는 항상 Object 클래스를 상속받는다.

- 상속 받을 부모 클래스가 없으면 묵시적으로 Object 클래스를 상속 받는다.

// extends Object는 생략하는것을 권장
public class Parent extends Object {

    public void parentMethod(int num) {
        System.out.println("Parent.parentMethod");
    }
}

public class Child extends Parent {
    
    public void childMethod () {
        System.out.println("Child.childMethod");
    }
}

// 최상위 부모 클래스 : Object
// 부모 클래스 : Parent
// 자식 클래스 : Child

 

Object클래스가 최상위 부모 클래스인 이유

- 공통 기능 제공

  - 모든 객체에서 toString(), equals(), getClass()같은 공통 기능을 제공해준다.

 

 

'인강 > 자바(중급1편)' 카테고리의 다른 글

String 클래스  (0) 2024.05.15
불변 객체  (0) 2024.05.06

문제 : 리눅스 환경에서 자바 어플리케이션 실행이 안됌

원인 : yml 저장시 들여쓰기 잘못적음

 

ex)

server:
    host: 127.0.0.1
    port: 3010

   path: v1/user

- 디렉티브(Directives)
  - HTML 태그에 추가적인 동작을 부여할 수 있는 기능
  - 디렉티브는 v- 접두어로 시작하는 특수 속성(attribute) 


v-bind:class 디렉티브
  - HTML 요소의 클래스를 동적으로 바인딩할 때 사용된다
  
예제1) 두개 이상의 클래스 동적으로 바인딩하는법

<div
:class="['name' + idx, data.active === 'Y' ? 'active' : '']"

>

</div>

'Vue' 카테고리의 다른 글

[Vue] 상대경로, 절대경로  (0) 2020.12.10
나중에 정리할 내용  (0) 2020.12.05
vue.js(개발환경)  (0) 2020.12.02
[Vue] 바인딩 v-bind:(style, class)  (0) 2020.04.10
[Vue] HTTP 통신  (0) 2020.02.13
참고 사이트
https://blueyikim.tistory.com/2199
https://kkh0977.tistory.com/562

HttpURLConnection
  - Java에서 제공하는 HTTP 프로토콜을 이용한 통신을 위한 클래스입니다.
  - URL을 통해 서버와 연결을 만들고, 데이터를 전송하고 수신할 수 있습니다.
  - 다양한 HTTP 요청 메서드(GET, POST, PUT, DELETE 등)를 지원하며, 요청 헤더(header)와 요청 본문(body)을 설정할 수 있습니다.
    - 또한, 서버로부터 받은 응답 코드(response code)와 응답 본문(response body)을 확인할 수 있습니다.

DataOutputStream
  - 자바에서 데이터를 파일에 저장하거나 네트워크로 전송하기 위해서는 데이터를 바이트 스트림으로 변환해야 합니다.
  - 이때 DataOutputStream 클래스를 사용하면 간단하게 데이터를 바이트 스트림으로 출력할 수 있습니다.
  
  
- 서버와 통신할때 동작 방식
  - 3~6단계는 선택사항
  - 5~6단계는 서로 바꿔서 사용 가능
1. URL 객체 생성
2. URL에서 URLConnection 객체 얻기
  - openConnection()메서드는 실제 네트워크 연결을 설정하지 않는다.
  - URLConnection 클래스의 인스턴스를 반환한다.
  - 실제 네트워크 연결
    - connect()메서드가 호출 될때
- 헤더 필드를 읽거나 입력스트림/출력스트림 가져올때
3. URLConnection 구성
- 클라이언트와 서버간 통신을 할때 다양한 옵션을 설정할 수 있다.
  - setConnectTimeout(int)
    - 연결 시도 시 대기 시간을 설정하는 데 사용됩니다.
- 설정한 시간내에 연결이 되지않으면 연결 시도는 실패하게 됩니다.
  - setDoOutput(boolean)
    - 서버에 데이터를 보낼지 여부 
- true를 설정하면 URLConnection이 출력 스트림을 사용하여 서버로 데이터를 전송할 수 있습니다.
  - setRequestProperty(String key, String value)
    - HTTP 요청 헤더에 특정 속성을 추가하는 데 사용됩니다.
- setRequestProperty() 메서드를 사용하여 HTTP 요청 헤더에 속성을 추가하면, 이 속성이 HTTP 요청 헤더에 포함되어 서버에 전송됩니다.
- 첫 번째 인수는 HTTP 요청 헤더의 속성 이름이고, 두 번째 인수는 해당 속성의 값을 나타냅니다.
- ex) setRequestProperty("Accept-Charset", "UTF-8");
  - setRequestMethod(String method)
    - HTTP 요청 방법(Method)을 설정하는 데 사용됩니다.
- 일반적으로 사용되는 방법으로는 GET, POST, PUT, DELETE 등이 있습니다.
4. 헤더 필드 읽기
  - 연결 성공후 서버에서 URL요청을 처리하고 메타데이터(헤더 필드)와 실제 콘텐츠로 구성된 응답을 받습니다.
  - 헤더 필드는 키:값 쌍의 모음입니다.
  - 헤더 필드는 서버에 대한 정보, 상태 코드, 프로토콜 정보등을 나타냅니다.

5. 입력 스트림 가져오기 및 데이터 읽기
6. 출력 스트림 가져오기 및 데이터 쓰기

7. 연결종료
  - InputStream or OutputStream 객체에서 close()메서드를 호출하면 URLConnection 인스턴스와 연결된 네트워크 리소스가 해제됩니다.
  

'Java' 카테고리의 다른 글

[Java] Static 정리  (0) 2023.04.10
클래스(class)  (0) 2023.04.06
접근 제어자  (0) 2023.04.06

+ Recent posts