java & comment 8일차 강의

김용진·2023년 7월 12일
0

1. static

1-1. 멤버변수와 static 멤버변수의 차이

static 변수는 프로그램의 실행과 동시에 객체의 생성 여부와 상관 없이 이미 존재하기 때문에 소스 코드에서는 특정 클래스 안에 명시하지만, 그 클래스를 통해서 생성되는 객체나 그 안에 포함되는 멤버변수와는 다른존재이다.

객체가 생성되지 않았더라도 이미 존재하고 있기 때문에 Static 변수는 객체의 이름을 통해 접근하는 것이 아니라, 클래스의 이름을 통해서 접근해야 한다.

단, static 변수가 선언된 클래스 안에서는 변수 이름으로 직접 접근이 가능하다.

	// Article 클래스 및 다른클래스에서 접근하는 경우
	Article.count = 3;
	Article.category = "공지사항"

	// Article 클래스에서 접근하는 경우
	count = 3;
	category = "공지사항"

1-2. static 데이터에 접근하기 위한 메서드

클래스에서 정의하는 일반 메서드들은 객체의 생성과 동시에 동적메모리 영역에서 활성화 된다.

  • 동적 메모리 영역의 입장에서는 고정 메모리 영역의 자원들은 항상 존재한다.

  • 고정 메모리 영역의 자원들은 동적 메모리의 자원들이 항상 존재하는 것이라는 보장을 받지 못한다.

그러므로 객체의 생성과 상관없이 static 변수에 접근하기 위한 메서드를 만들 필요가 있는데, 메서드의 정의 과정에서 static 키워드를 사용하면 static 자원에 접근하기 위한 메서드를 만들 수 있다.

1-3. static 메서드 사용시의 제약 사항

메모리 영역의 차이 때문에 static 메서드는 동적 메모리 영역의 멤버변수를 사용하거나, static이 아닌 일반 멤버함수를 호출할 수 없다.

  • 고정 영역
    -> static 변수와 static 멤버함수가 생성된다.
    -> 이 영역의 자원들은 프로그램이 실행되는 동안 항상 존재한다.
    -> 동적 메모리 영역의 자원들은 항상 존재하는 것이 아니기 때문에 static 멤버함수는 동적 메모리 영역의 멤버변수를 사용하거나, static이 아닌 일반 멤버 함수를 호출할 수 없다.

  • 동적 영역
    -> 객체, 객체 안에 멤버변수, 메서드, 메서드가 호출되었을때 사용되는 지역변수 등이 생성 된다.
    -> 이 영역의 자원들은 생성과 제거가 유동적으로 반복된다.
    -> static 자원은 항상 존재하는 것이므로 동적 영역에서는 static 변수를 활용하거나, static 멤버함수를 호출할 수 있다.

2. 디자인 패턴(Design Pattern)

2-1. 디자인 패턴이란?

디자인 패턴이란 기존 한경 내에서 반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션 같은것이다.

디자인 패턴은 설계자들이 "올바른" 설계를 "빨리"만들 수 있도록 도와준다.

2-2. sigleton 패턴(싱글톤패턴)

프로그램 내의 여러곳에서 반복적으로 사용되어야 하는 객체에 대해 전역적인 범위를 갖도록 객체를 생성하고, 이 객체를 여러 곳에서 공유하기 위한 클래스 작성 패턴

  • 이러한 패턴을 통해 생성된 객체를 싱글톤 객체라고 부른다.

2-3. singleton 객체의 이점

프로그램의 전역에서 활용할 재료로 사용되는 공유 기능을 하나만 생성하여 여러 곳에서 재사용함으로 해서 메모리를 효율적으로 사용할 수 있다.

단 한번만 객체를 생성하면 다시 객체를 생성할 필요가 없기 때문에, 해당 기능을 사용할 때마다 객체를 일일이 생성해야 하는 번거로움을 피할 수 있다.

3. Package

3-1. java Package

패키지 -> 클래스에 대한 묶음 단위
- 클래스를 용도별이나, 기능별로 그룹화 한 것을 말한다. 소스코드는 폴더로 분류된 형태로 존재하게 된다.
- 서로 다른 패키지에 속해 있다면 다른 클래스와 이름이 동일하더라도 충돌이 발생하지 않는다.

  • (서로 다른 폴더(패키지)에는 이름이 같은 파일들이 존재할 수 있다.)

3-2. 패키지 명칭

패키지 이름의 일반적인 정의 형식

  • 회사 도메인이름의 역순. 프로젝트이름의 소문자도

      		kr.co.codingbox.myapp.user
    		- 회원가입에 관련된 *.java
    
    		kr.co.codingbox.myapp.board
    		- 게시판에 관련된 *.java

3-3. 복사된 소스파일 확인

패키지에 소속된 클래스파일은 첫 번째 라인에서 자신이 소속된 클래스 패키지 이름을 선언해야 한다.

3-4. 라이브러리(Library)

한개 이상의 패키지들을 배포하기 용이하도록 압축한 형태
다른 프로그램에서 라이브러리 안에 포함된 기능을 활용할 수 있다.
*.jar

3-5. Java기본 API들

우리가 사용하는 JDK안에는 이미 수많은 라이브러리가 포함되어 있고, 이 라이브러리 안에는 프로그램 개발에 필요한 패키지들이 기본적으로 포함되어 있다.

자바 프로그래밍은 이러한 라이브러리들의 기능을 활용하여 이루어 진다.

이렇게 프로그램 개발을 위하여 기본적으로 제공되는 기능들을 API라 한다.

JRE(자바실행환경)은 이클립스로 자바를 만들면 자동으로 선언되어 들어가 있는것을 확인할 수 있다.

4. Wrapper Class

4-1. Wrapper Class

Java는 데이터를 관리하기 위하여 기본 데이터 타입을 지원하지만, 클래스를 통해서 만들어진 객체를 통한 데이터 관리도 가능하다.

어떠한 상황에서는 기본 데이터 타입의 변수를 객체형태로 사용해야 하는 경우가 있는데, 이때 기본형 타입을 객체로 포장할 필요가 있다.

포장클래스(Wrapper Class)는 특정 기본형 타입을 나타내는 용도로 사용한다.

4-2. Wrapper Class 사용하기

초창기 Java언어는 기본 자료형의 연산보다도 Wrapper클래스를 사용한 연산이 더 많이 이루어 졌으나, 자바언어가 발전함에 따라서 기본 자료형과 Wrapper클래스 간에 연산에 차이가 없어졌다.

자료형과 Wrapper Class를 나타내는 표, Wrapper는 클래스 단위다 보니, 대문자로 표현되어있는것을 볼 수 있다. Shoft가 아닌 Short이다 착각하면 안된다.

4-3. Wrapper Class 객체 만들기

각각의 Wrapper Class는 클래스의 객체는 자신과 대응되는 기본 자료형의 데이터를 파라미터로 전달 받는다.

int num = 1;
Integer wraaper = new Inteager();

4-4 Wrapper 클래스의 형 변환

기본 자료형과 Wrapper 클래스 간에는 서로 암묵적인 형 변환이 가능하다.

	int num = 100;
	Integer wrapper = num;
	----------------------
	Integer wrapper = new Integer(100);
	int num = wrapper;

4-5. Wrapper 클래스의 static 데이터

모든 Wrapper 클래스는 static 데이터 형태로 Wrapper 클래스에 대응되는 자료형에 대한 최소값과 최대값을 가지고 있다.

	int max = Integer.MAX_VALUE;
	int min = Integer.MIN_VALUE;

4-6. 문자열 데이터의 형변환

1과 "1"의 차이
-> 기본 자료형과 문자열 데이터간의 연산에서는 기본 자료형 데이터가 문자열로 변환된 후, 문자열간의 연산으로 처리된다.

	int a = 1;
	String b = "1";
	Sytem.out.println(a+b); // 문자열 11 출력

사용자 입력값에 대한 연산
- 모든 프로그램 플랫폼에서 사용자의 입력값은 String으로처리된다.
- 만약, 인터넷 뱅킹에서 2개의 계좌로 송금할 금액을 각각 입력하였을때, 총 금액을 계산한다면 다음과 같이 처리될 것이다.

	String money1 = "5000";
	String money2 = "3000";
	money1 + money2 = "50003000"; //8000으로 바꿔야함

문자열 데이터를 기본 데이터 형으로 변환하기
- Wrapper 클래스에는 기본 자료형의 모양을 띄고 있는 문자열 데이터를 실제 기본 자료형으로 변환시키는 기능이 포함되어 있다.
- 오늘날의 Java에서 Wrapper 클래스의 가장 큰 의미는 이 부분이다.

	String money1 = "5000";
	String money2 = "3000";
	
	int m1 = Integer.parseInt(money1);
	int m2 = Integer.parseInt(money2); //문자열을 int형으로 변환


	system.out.println(m1+m2); //8000 출력

5.Math

  • 수학적 연산을 지원하는 클래스
    Math 클래스는 흔히 계산을 하는데 도움이 되는 많은 수의 기본적 수학 함수들을 제공한다.
    Math클래스는 Java 클래스 표준라이브러리의 java.lang 패키지에 정의되어 있다.
    Math클래스의 모든 메서드들은 static 메서드로, 클래스의 객체를 생성하지 않고, 그 메서드가 정의된 클래스 이름을 통해 호출될 수 있다.
profile
메모리폼

0개의 댓글