분류 전체보기

반응형

Select box ID로 접근하여 선택된 값 읽기


<select id="userListSB">
<option value="userID">홍길동</option>
<option value="userID">조석</option>
<option value="userID">아무개</option>
</select>
$("#userListSB option:selected").val();

 

 

Select box ID로 접근하여 선택된 텍스트 읽기


$("#userListSB option:selected").text();
//홍길동,조석,아무개..

 

 

Select box ID로 접근하여 여러 개 Value 값 가져오기.


<select id="userListSB">
<option value="userID" value2="userNumber" value3="userPK">홍길동</option>
<option value="userID" value2="userNumber" value3="userPK">조석</option>
<option value="userID" value2="userNumber" value3="userPK">아무개</option>
</select>
$("#userListSB option:selected").attr('value2');
//value2에 userNumber 데이터
$("#userListSB option:selected").attr('value3');
//value3에 userPK 데이터

 

 

Select box Name로 접근하여 선택된 값 읽기


<select name="userListname">
<option value="userID">홍길동</option>
<option value="userID">조석</option>
<option value="userID">아무개</option>
</select>
$("select[name=userListname]").val();

 

 

 같은 방식으로 span과 같은 다른 태그도 접근 가능하다


 

<span name="spanUserList">그리고 아무도 없었다.</span>
$("span[name=spanUserList]").text();

 

반응형

[Java] 추상 클래스

2019. 10. 26. 23:17
반응형

오늘은 Java 추상 클래스 개 (개념) 이 (사용 이유) 문 (문법 및 예시) 시작하겠습니다.

 

개념


추상 메소드(abstract method)란 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미합니다. 라고 적혀져있습니다.

 

자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미

자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미

자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미

3번 강조

 

구체적 예시를 들어보겠습니다.

 

화장품 클래스

화장품 제조 메소드

화장품 A - 물 30% 에센스 30% 거품 40% (화장품 클래스 상속시 제조메소드(오버라이딩) 필수 사용)

화장품 B - 물 80% 에센스 10% 거품 10% (화장품 클래스 상속시 제조메소드(오버라이딩) 필수 사용)

화장품 C - 물 50% 에센스 40% 거품 10% (화장품 클래스 상속시 제조메소드(오버라이딩) 필수 사용)

 

메소드를 공통적으로 쓰는 것

 

제조 메소드가 공통으로 쓰인다.

화장품 클래스 상속-A,B,C

 

실체클래스란?

실체가 드러나는 클래스 추상클래스는 실체 클래스의 공통적인 부분을 추출해 어느정도 규격을 잡아놓은 추상적인 클래스이다.

 

추상 클래스 : 실체클래스들의 공통적인 특성을 추출하여 틀을 잡아놓은 클래스

실체 클래스 : 객체를 직접 생성할  있는 클래스

추상클래스와 실체클래스는 상속적인 관계

 

 

 

사용 이유


자바에서 추상 메소드를 선언하여 사용하는 목적 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함

 

공통된 필드와 메서드를 통일할 목적

여러 명의 개발자가 동시에 개발했을 경우 추상메소드를 사용하지 않으면 메소드 이름,매개변수가 모두 제 각각일것이다. 나중에 뜯어고칠때 고생할 것이다.

 

유지보수,통일성 

 

실체클래스 구현시, 시간절약

화장품 클래스가 프레임워크가 되는 셈이다.

즉 뼈대가 만들어져있어 그 안에 내용만 구현하면 되니 시간절약이 많이 되고 효율적으로 일을 할 수 있다.

화장품 제조를 하라는데 화장품에 뭐가들어가는지도 모르는데 

추상 메소드를 사용한다면 그 안에 들어갈 매개변수가 있으므로 안에 내용만 구현하면 된다 

 

규격에 맞는 실체클래스 구현

화장품 클래스 규격

화장품 제조 메소드 사용시 물은 최소 20% 최대 70%로만 구현한다.

화장품 제조 메소드 사용시 에센스는 최소 05% 최대 20%로만 구현한다.

화장품 제조 메소드 사용시 거품은 최소 20% 최대 50%로만 구현한다.

 

이런식에 규격을 정하고 내용을 만들기 때문에 큰 틀에서 벗어날래야 벗어날 수 없다.

 

추상클래스를 상속받은 실체클래스들은 반드시 추상메서드를 재정의(오버라이딩)해서 실행 내용을 작성해야 한다.

추상클래스를 상속받은 실체클래스들은 반드시 추상메서드를 재정의(오버라이딩)해서 실행 내용을 작성해야 한다.

추상클래스를 상속받은 실체클래스들은 반드시 추상메서드를 재정의(오버라이딩)해서 실행 내용을 작성해야 한다.

3번 강조

 

규격에 맞게 소스가 구현되어 있기 때문에 해당 규격에 대한 구현부만 수정하면 손 쉽게 수정이 가능하기 때문이다.

 

 

 

문법


추상클래스나 추상메소드를 선언하기 위해서는 이름 앞에 abstract이라는 키워드를 추가하면 된다.

 

abstract class 클래스이름 {

    ...

    abstract 반환타입 메소드이름();

    ...

}

abstract class Cosmetics { abstract void produce(int water,int essence,int bubble); }

class EAXXIE extends Cosmetics { 
@Override
void produce(int water,int essence,int bubble) 
{ System.out.println("물 "+water+"%"+" 에센스 "+essence+"%"+" 거품 "+bubble+"%"); } }

class DxG extends Cosmetics { 
@Override
void produce(int water,int essence,int bubble) 
{  water += 5;
System.out.println("물 "+water+"%"+" 에센스 "+essence+"%"+" 거품 "+bubble+"%"); } }

 

public class Ex {

    public static void main(String[] args) {

        // Cosmetics c = new Cosmetics(); // 추상 클래스는 인스턴스를 생성할 수 없음.

        EAXXIE c = new EAXXIE(); // 클래스 인스턴스 생성

        DxG d = new DxG(); // 클래스 인스턴스 생성

 

        c.produce(30,30,40); // 추상 메소드 재정의(오버라이딩)

        d.produce(70,20,10); // 추상 메소드 재정의(오버라이딩)

    }

}

 

 

 

정리

1. 추상클래스는 실체클래스의 공통적인 부분(변수,메서드)를 추출해서 선언한 클래스

2. 추상클래스는 객체를 생성불가 아직은 실체성이 없고 구체적이지 않기 때문에!

3. 추상클래스와 실체클래스는 상속관계!

4. 규격을 정해 큰 틀에서 벗어나지 않아 손 쉽게 수정 가능

반응형
반응형

 

오늘은 Mysql || MariaDB group by & having (개념) (사용 이유) (문법 예시) 시작하겠습니다.

 

Group by

 

개념


SQL의 많은 장점 중 GROUP BY는 가장 유용하고 자주 사용하게 되는 구문 중 하나이며, 데이터의 양이 많아지고 컬럼이 늘어날수록 필수적으로 사용해야만 하는 구문입니다.

 특정열이나 특정 열을 연산한 결과를 집계 키로 정의하여 그 집계 키의 Unique 값에 따라 그룹을 짓는 연산자라고 정의 할 수가 있다. 사용방법은 select 절의 가장 마지막 라인에 Group by라는 절을 쓰고 칼럼 및 연산식을 지정하면 된다. 하나 이상이면 , (콤마)를 이용하여 구분할 수도 있다. 앞서 이야기했듯이 집계 키로 정의된 특정 열이나 특정 열을 연산한 결과 값이나 동일한 집계 키 즉, 동일한 값이면 오직 한번(Unique)만 나타난다.

여기서 잠깐!

Group by Distinct 차이점

Group by : Unique 집계 연산 (Count(*), SUM(), AVG(), MAX(), MIN())

Distinct : Unique 집계

 

Unique 집계 연산

Unique 집계 연산

Unique 집계 연산

3 강조

 

 

그룹 함수 종류


함수명

기능

사용

 COUNT

 행의 수를 계산한다. 

 COUNT(컬럼 | *) 

 MAX

 값들 중에 최대 값을 반환한다. 

 MAX(컬럼) 

 MIN

 값들 중에 최소 값을 반환한다. 

 MIN(컬럼) 

 AVG

 평균 값을 계산한다. 

 AVG(컬럼) 

 SUM

 총 합계를 계산한다. 

 SUM(컬럼)

 VARIANCE

 분산을 계산한다. 

 VARIANCE(컬럼) 

 STDDEV

 표준편차를 계산한다. 

 STDDEV(컬럼) 

 

사용 이유


위에 개념에서도 말했다시피 데이터의 양이 많아지고 컬럼이 늘어날수록 필수적으로 사용해야만 하는 구문

이라고 합니다.

그대로 뭔가 집계하고 연산할 데이터가 필요하면 사용하면

 

문법 예시


SELECT column-names
FROM table-name
WHERE condition
GROUP BY column-names

먼저 예시로 사용할 테이블 및 데이터 하나 만들겠습니다.

create table expenditure(

id varchar(64),
timestamp timestamp,
money int,
primary key(id,timestamp)

);

insert into expenditure values('gildong','2019-10-19',100000);
insert into expenditure values('gildong','2019-10-20',70000);
insert into expenditure values('gildong','2019-10-21',3000);
insert into expenditure values('gildong','2019-10-22',7700);
insert into expenditure values('gildong','2019-10-23',50100);
insert into expenditure values('samsam','2019-10-19',50000);
insert into expenditure values('samsam','2019-10-20',60000);
insert into expenditure values('samsam','2019-10-21',90000);
insert into expenditure values('samsam','2019-10-22',1110000);
insert into expenditure values('samsam','2019-10-23',31000);
insert into expenditure values('YUMDDA','2019-10-19',11200000);
insert into expenditure values('YUMDDA','2019-10-20',122300000);
insert into expenditure values('YUMDDA','2019-10-21',10330000);
insert into expenditure values('YUMDDA','2019-10-22',3541100);
insert into expenditure values('YUMDDA','2019-10-23',10000000);

사용자별 지출내역이 들어있는 초간단 예시 테이블을 만들었습니다.

상황 1.지출내역 테이블에서 날짜별 총 합산 금액과 평균 금액,최소,최고 금액을 구하시오.

select timestamp,sum(money),avg(money),min(money),max(money) from expenditure group by timestamp;

 

결과

 

HAVING

 

개념


HAVING은 간단하게 생각해서 GROUP BY 한 결과에 조건을 붙이고 싶을 때, 즉 GROUP BY의 WHERE 절과도 같다고 볼 수 있습니다.

 

사용 이유


GROUP BY조건을 걸고싶을때.

 

문법 예시


SELECT column-names
FROM table-name
WHERE condition
GROUP BY column-names
HAVING condition

 

상황 2.지출내역 테이블에서 지출날짜 합계 지출이 5천만원이상인 날짜만 구하시오.

select timestamp,sum(money),avg(money),min(money),max(money) 
from expenditure
group by timestamp 
HAVING sum(money) > 50000000;

 

결과

 

예제 파일 제공


[MariaDB] group by &amp; having.sql
0.00MB

반응형

[ISO] ISO 8601 개념

2019. 10. 24. 12:32
반응형

ISO 날짜 형식이란?
정식 명칭 
Date elements and interchange formats - Information interchange - Representation of dates and times
미쳤다..
현재 제일 최신 버전 ISO 8601
구버전 ISO 8601:2000, ISO 8601:1988 
날짜와 시간과 관련된 데이터 교환을 다루는 국제 표준이다. 
데이터 교환을 다루는 국제 표준
데이터 교환을 다루는 국제 표준
데이터 교환을 다루는 국제 표준
3번 강조
이 표준은 국제 표준화 기구(ISO)에 의해 공포되었으며 1988년에 처음으로 공개

목적
날짜와 시간의 숫자 표현에 대한 오해를 줄이고자 함에 있는데, 숫자로 된 날짜와 시간 작성에 있어 다른 관례를 가진 나라들 간의 데이터가 오갈 때 특히 그렇다.
필자 필수 검색어 : java || javascript UTC to KST / KST to UTC 

형태
가장 기본적인 형식(날짜와 시간)은 아래와 같습니다.
2017-03-16T17:40:00+09:00
• 날짜 : 년-월-일의 형태로 나와있습니다.
• T : 날짜 뒤에 시간이 오는것을 표시해주는 문자입니다.
• 시간 : 시:분:초의 형태로 나와있으며 프로그래밍 언어에 따라서 초 뒤에 소수점 형태로 milliseconds가 표시되기도 합니다.
• Timezone Offset : 시간 뒤에 ±시간:분의 형태로 나와있으며 UTC기준 시로부터 얼마만큼 차이가 있는지를 나타냅니다. 현재 위의 예시는 한국시간을 나타내며 UTC기준 시로부터 9시간 +된 시간임을 나타냅니다
• Z or +00:00 : UTC기준시를 나타내는 표시이며 “+00:00”으로 나타내기도 합니다.


표기법

연월일 표기법
1981-02-22 또는 19810222는 1981년 2월 22일을 나타낸다.

연과 연중일수 표기법
YYYY-DDD(확장 형식) 또는 YYYYDDD(기본 형식)로 표기한다. DDD는 연중 날의 번호로서 1월 1일이 001이며, 12월 31일은 평년은 365, 윤년은 366이 된다.
1981-053 또는 1981053 : 1981년의 53번째 날, 즉 2월 22일을 나타낸다.

시간 표기법
시간의 표기에는 쌍점을 쓴 hh:mm:ss(확장 형식) 또는 hhmmss(기본 형식)를 사용한다. hh는 시(時)로서 00부터 24까지의 값을 갖는다. mm은 분(分)으로서 00부터 59까지의 값을 갖는다. ss는 초(秒)로서 00부터 59까지의 값을 갖는다. 반점이나 온점을 써서 앞 단위를 나눈 시간을 나타낼 수도 있는데, 이때 십진수를 사용하며 자릿수는 정보 교환 주체 사이에 미리 합의해야 한다. 다음은 분절 시간 표현 자릿수로 한 자리를 정한 예이다.
10:20:30,4 또는 102030,4 : 10시 20분 30.4초
10:30,5 또는 1030,5 : 10:30:30과 같다.
10.5 : 10:30와 같다.

날짜와 함께 표기할 때 표기법
날짜와 시간 사이에 T를 넣어 표기한다.
1981-02-22T 09:00:00 : 1981년 2월 22일 09:00

기간 표기법
기간을 나타낼 때에는 시작일시/종료일시로 표기한다.
1981-02-22/2007-09-26 : 1981년 2월 22일 ~ 2007년 9월 26일
1981-02-22T 09:00:00+09:00/2007-09-26T 17:00:00+09:00 : UTC+9 시간대에서 1981년 2월 22일 9시 ~ 2007년 9월 26일 17시

시간대의 표기법
시간대를 표기할 때에는 Z또는 +/- 기호를 사용한다.
Z 또는 +/- 기호를 사용  
Z 또는 +/- 기호를 사용
UTC 시간대에서는 시각 뒤에 Z를 붙인다.
예) 1981-02-22T 09:00Z 또는 19810222 T0900 Z : UTC 시간대에서의 1981년 2월 22일 오전 9시
UTC 외의 시간대에서는 시각 뒤에 +- hh:mm, +- hhmm, +- hh를 덧붙여 쓴다.
예) 1981-02-22T09:00:00+09:00 : UTC+9 시간대에서의 1981년 2월 22일 오전 9시
+가 붙으면, UTC의 시각보다 더 "빠르다"다는 의미다. 반대로 -는 느리다는 것을 의미하다.
예를 들어, 1981-02-22T09:00+09:00 는 1981-02-22T 00:00Z 와 동일하다.
즉, UTC+9 시간대에서는 오전 9시이지만, UTC 시간대에서는 오전 0시이다.

정리
1.날짜와 시간과 관련된 데이터 교환을 다루는 국제 표준이다. 
2. 저 위에 표기법과 일치하거나 T가 붙으면 ISO 형식의 시간이다.
3.Z가 붙으면 UTC 시간대이다.
4. 현재 최신 버전은 ISO 8601이다.

반응형
반응형

iframe 페이지에 그냥 location.reload() 하게되면 해당 iframe 안에만 새로고침 된다.(링크도 마찬가지 그안에서 페이지가 변경됨)

 

iframe 전체 페이지를 새로고침 하거나 링크하고 싶다면

 

location 부모 iframe 새로고침

window.parent.location.reload();

 

location 부모 iframe 링크

window.parent.location.href="link";

반응형

[Java] 예약어 정리

2019. 10. 23. 14:32
반응형

자바 예약어

예약어(키워드)란? 

예약어란 자바에 등록되어 있어서 의미가 약속되어 있는 단어를 뜻합니다.

자바에 이미 예약어로 등록되어 있는 단어는 속성의 변수명, 메소드명으로 사용할 수 없으며

프로그래밍 과정에서 이렇게 특정 의미가 있는 단어를

프로그래머가 식별자로 사용하게 되면 에러나 버그가 발생할 수 있습니다.

따라서 자바를 사용하는 프로그래머라면 자바에서 쓰이는

예약어의 종류와 쓰임에 대해서 숙지하고 사용할 줄 알아야 합니다.

 

abstract : 추상 메소드 또는 추상 클래스에 사용된다.

abstract class A{}
abstract  method{}

 

boolean : 데이터 타입, true 와 false를 이용할때 사용한다.

boolean a = true;
if(boolean){}

 

break : 가장 가까운 루프문을 탈출한다. 또한 switch - case문을 종료한다.

for ( int cnt = 0; cnt < 10; cnt++) {
   System.out println(cnt);
   if ( cnt == 5 )       break;   }
  System.out.println("Done.");
 }
}

 

byte : 기본 데이터 타입, 1byte로 된 byte형이다.

byte a = 1;

 

catch :  try-catch 문, 예외처리에 쓰인다. try문에 에러가 났을때 말그대로 받는다는 뜻으로 그 try문의 에러를 받고 catch문을 실행한다.

try{  throw new Exception(); }catch (Exception e){ e.printStackTrace(); throw e; }

 

finally : try-catch 문, 예외처리에 쓰인다. try-catch문이 끝난 뒤에 실행할때 쓰인다.

try{}catch(Exception e){}finally{}

 

char: 기본 데이터 타입, 2byte로 된 character형이다.

char a= 'a';

 

class : 클래스를 의미한다.

Company.class

 

continue : 루프문의 조건절로 이동해 조건을 비교한다.

for ( int cnt = 0; cnt < 10; cnt++) {
  System.out println(cnt);
 if ( cnt == 5 )       continue;   }
 System.out.println("Done.");
 }
}

 

default : 접근제어자 또는 switch문에 쓰인다. 클래스, 메소드, 멤버변수 앞에 아무것도 선언을 하지 않았을 경우 default라는 예약어가 붙고, switch문에는 모든 case문에 해당하지 않을 경우 마지막으로 실행되는 역할을 한다.

switch(입력변수) { case 입력값1: ... break; case 입력값2: ... break; ... default: ... break; }

do : do-while루프에서 중괄호 전에 쓰이는 예약어다.

do{}while();

 

double : 기본 데이터 타입, 8byte로 된 실수형이다.

double a = 11.222

 

if : 조건문 중 하나로, if(조건)형태로 조건이 true면 실행, false이면 빠져나간다.

if(boolean){ }

 

else : if-else문에서 if문의 실행내용과 다른 내용을 실행할때 사용한다.

if(false){
}else {}

 

extends : 클래스를 상속받는데 사용된다.

class User extends Company{}

 

float : 기본 데이터 타입, 4byte로 된 실수형이다.

float a = 0.22f;

for : 반복문 중 하나로, for(초기값;조건식;증가값){}, for문자을 반복할때 쓰인다.

for(int i=0; i<array.length; i++){}

 

implements : 인터페이스를 구현할때 쓰인다.

class MenuServiceImpl implements MenuService

 

import : 패키지내에 클래스를 사용하고 싶을때 쓰인다.

import java.util.HashMap;

 

instanceof : 객체타입이 형변환이 가능한지 검사할때 사용된다. true 또는 false로 반환한다.

class A{}
A a = new A();
System.out.printIn(a instanceof A);

 

int : 기본 데이터 타입, 4byte로 된 정수형이다.

int a = 1004;

 

interface : 다중상속이 가능한 일종의 추상클래스이다.

public interface MenuService

 

long : 기본 데이터 타입, 8byte로 된 정수형이다.

long a = 111111L;

 

native : 자바가 아닌 다른 언어로 입력되었을때 알려주는 예약어다.

모르겠음

new : 인스턴스를 만들때 사용되는 예약어다.

list result = new List<>();

 

null : 메모리에 아무 값이 없다는 의미로 쓰인다.

String a = null;
return null;

 

package : 클래스들을 하나로 묶는다.

package com.company.projectName.attr;

 

private : 접근 제어자로 같은 클래스 내에서만 접근이 가능하다.

private String name;

 

protected : 접근 제어자로 같은 패키지 내에서, 다른 패키지의 자손클래스에서 접근이 가능하다.

protected String name;

 

public : 접근 제어자로 같은 클래스, 패키지, 자손 클래스에 상관없이 이용에 제한이 없다.

public String name;

 

return : 메소드를 종료 혹은 값을 반환할때 사용된다.

public int calc(int a,int b){
return a+b;
}

 

short : 기본 데이터 타입, 2byte로 된 정수형이다.

short a = 1;

 

static : 멤버변수, 메서드, 초기화 블럭에 사용이 가능하며, 멤버변수는 모든 인스턴스에 공통적으로 사용되는 클래스변수가 되며, 클래스변수, 메서드는 인스턴스를 생성하지 않고 사용할 수 있게 된다.

public static String name;

 

super : 상위 클래스로부터 상속 받은 멤버변수 또는 메소드에 접근할때 사용되는 참조변수이다.

super()

 

switch : 조건문으로 switch(조건식){case 값 : ~ break;}식으로 되있다. 조건식에는 정수 또는 문자열만 가능하다. case값은 정수 상수만 가능하며 중복되면 안된다.

switch(입력변수) { case 입력값1: ... break; case 입력값2: ... break; ... default: ... break; }

 

synchronized : 메소드를 동기화 또는 동기화 블럭 생성시 사용된다.

public synchronized void methodName(String a) {} (이름 너무길어)

 

this : 가까운 멤버변수나 인스턴스를 가르킬때 사용한다.

this.a

 

throw, throws : 예외를 던질때 사용한다.

try{  throw new Exception(); }catch (Exception e){ e.printStackTrace(); throw e; }

 

try : try-catch 문, 예외처리에 쓰인다. 예외 발생 코드를 try{}문안에 넣는다.

try{  throw new Exception(); }catch (Exception e){ e.printStackTrace(); throw e; }

 

void : 리턴값이 없다는 의미이다.

public void methodName(String a) {}

 

while : 반복문이며 while(조건식){} 조건식이 true인 동안 반복이 된다.

 while( 조건문 )
 { 수행할 작업 }
반응형
반응형

전역변수(Global variable) 지역변수(Local variables)

 

선언위치에 따른 변수의 종류

 

변수는 선언위치에 따라 전역변수지역변수로 나눠지는데

선언위치에 따라

선언위치에 따라 

기억!!

 

말그대로 전체에서 어디서든 호출하면 사용할수 있는 변수는 전역변수

특정한 구역({ })안에 생성되어 그 지역에만 사용할수 있는 변수는 지역변수라고 생각하면 된다.

 

바로 예시

class Ex_variables{

int global_int;           // 전역변수(객체변수) : 같은클래스에서 호출이 가능

static int global_statuc_int; // 전역변수(클래스변수) : 다른 클래스에서도 호출이 가능

void method()

{

int local_int = 0;  //지역변수 { }안에 생성되며 { }를 벗어나면

}                //method() 라는 메소드가 끝나는 시점에 바로 삭제

}

 

예시2

class Ex_variables2 {

    int global_v;

   void addmethod(int a, int b)
   {
        global_v  =  a  + b;
   } 

} 

1. addmethod 실행 내용

a+b 값이 global_v (전역변수) 변수에 들어간다.

2 .addmethod 실행 끝과 동시에 a,b 지역변수 사망

3 .global_v 전역변수이기때문에 값이 살아있음.(a+b 더한 )

 

하지만 전역변수도 종류가 있다.

1.객체변수 == 인스턴스 변수

객체변수는 클래스영역에서 선언되며 클래스의 객체를 생성할 때 만들어진다.

즉 객체화를 시켜서 호출해야지만 사용이 가능

 

2.클래스변수 == static 변수

객체화를 시키지 않고도 사용이 가능하며

객체변수가 객체화 시킬때마다 서로 다른 저장공간을 가지는 반면

클래스변수는 여러번 객체화 시켜도 공통적인 저장공간을 가지게 된다.

 

여기서 서로 다른 공간이란 객체가 만들어지면서 새로운 해쉬값을 가지게 되는데 그것을 칭하는

클래스 변수는 같은 해쉬값 놀이터에서 놀고,

객체 변수는 새로운 해쉬값 놀이터를 계속 만들어 논다.

 

문법

객체변수

자료형 변수이름;

int localVar = 1;
String localVarstr = "local";

 

클래스 변수

static 자료형 변수이름;

static int localVar = 1;
static String localVarstr = "local";

예시3

class Card {

String kind;           

int number;

static int width = 200;  

static int height = 300;    

}

설명

객체 변수
String kind;
int number;


클래스변수
static int width = 200;    
static int height = 300; 

전역변수 설명의 영원한 친구 카드 클래스…

public class Ex_variables3 { 

public static void main(String[] args){ 

System.out.println("Card의 너비는 :"+ Card.width); 
System.out.println("Card의 높이는 :"+ Card.height); 

Card c1 = new Card(); 
c1.kind = "Heart"; 
c1.number = 7; 

Card c2 = new Card(); 
c2.kind = "Spade"; 
c2.number = 4; 

c1.width = 250; 
c1.height = 350; 

} 
}

설명

System.out.println("Card의 너비는 :"+ Card.width);

System.out.println("Card의 높이는 :"+ Card.height);

static 붙음 클래스 변수는 클래스명.변수명으로 직접 호출(사용) 가능

해쉬값 동일

 

Card c1 = new Card();

c1.kind = "Heart";

c1.number = 7;

 

객체 생성(이때 다른 해쉬값을 가진다는거)

객체 생성 클래스명.변수명으로 객체변수를 다룸

궁금한 사람 c1.hashCode(); c2.hashCode();

c1.kind = "Heart"; c1 객체만의 kind 값이 되는것.

 

Card c2 = new Card();

c2.kind = "Spade";

c2.number = 4;

마찬가지로 c2.kind = "Sqade"; c2 객체만의 kind 값이 되는것.

 

c1.width = 200;

c1.height = 300;

c1 객체가 클래스 변수에 값을 다르게 지정

클래스 변수를 다르게 지정 했음으로 c2 width,height 동일하게 변경

 

클래스 변수 놀이터(해쉬값) 하나밖에 없는데 변경되면 같이 변경되는게 당연

객체 변수 놀이터(해쉬값) 지들이 새로만들어서 쓰기 때문에 변경해도 자기 놀이터만 변경됨.

 

정리

1.지역변수와 전역변수의 구분은 선언한 위치에 따라다르다.

2.전역변수는 어디서나 호출 가능하고 지역변수는 Method 안에 서식한다.

3.전역변수 종류는 두가지로 객체변수,클래스변수가 있다

4.객체변수는 같은 클래스에서만 자유롭게 사용가능하고, 클래스 변수는 다른 클래스에서도 사용이 가능하다.

5.클래스 변수는 해쉬값이 같고,객체 변수는 객체 선언마다 다른 해쉬값이 생성된다.

반응형
반응형

자바는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다.

처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했지만 현재 웹 애플리케이션 개발에 가장 많이 사용하는 언어 가운데 하나이고, 모바일 기기용 소프트웨어 개발에도 널리 사용하고 있다. 현재 버전 14까지 출시했다.(2020년 05월 기준)

출처 위키백과

이 언어는 원래 제임스 고슬링의 사무실 밖에 있던 오크 나무를 따다

오크(Oak), 혹은 그린(Green) 이라고도 불렀으나,  오크(Oak) → 자바(Java)로 개명 후 출시

 

객체지향 언어 (Object-Oriented Programming, OOP)

프로그래밍은 두 가지 방식이 있습니다.

1. 절차 지향

2. 객체지향

 

여기서 소개하는 Java는 객체지향 언어입니다.

 

일단 Java에 대해 설명하라는 질문을 받으면 무조건 나와야 하는 게 객체지향 언어라는 것입니다.

객체지향은 Smalltalk라는 언어에서 처음 개념이 탄생했는데,

 

객체 지향의 장점

 

1. 캡슐화

필요한 속성(Attribute)과 행위(Method)를 하나로 묶고

그중 일부를 외부에서 사용하지 못하도록 은닉한다

관련된 코드와 데이터가 묶여있고 오류가 없어 사용이 편리합니다. 데이터를 감추고 외부 세계와의 상호작용은 메서드를 통하는 방법인데, 라이브러리로 만들어 업그레이드하면 쉽게 바꿀 수 있습니다.

 

2. 상속 (extends)

이미 작성된 클래스를 이어받아서 새로운 클래스를 생성하는 기법으로 위에서 말한 기존 코드를 재활용해서 사용하는 것을 의미합니다. 객체지향 방법의 큰 장점 중 하나입니다.

 

3. 다형성 (Overloading, Override)

하나의 이름(방법)으로 많은 상황에 대처하는 기법입니다. 개념적으로 동일한 작업을 하는 함수들에 똑같은 이름을 부여할 수 있으므로 코드가 더 간단해지는 효과가 있습니다.

 

객체 지향의 단점

 

1. 개발 설계의 복잡함

2. 느려지는 런타임 속도

 

자바 가상 머신( Java Virtual Machine, JVM)

  1. 자바는 ‘바이트코드(Bytecode)’를 생성한다. 바이트코드는 하드웨어에 종속적이지 않은 중간 파일로, 가상 머신을 거쳐 해석·실행하는 구조이다.
  2. 가상 머신으로 자바는 스마트폰, 컴퓨터, Mac, 리눅스 등 서로 다른 기기나 운영체제에서 동일한 프로그램을 개발하고 실행할 수 있다.

자바 플랫폼

  1. 자바 플랫폼은 자바 프로그램이 실행되는 특정 환경을 말한다.
  2. 여러 제약(화면, 입출력 장치, 성능 등) 때문에 모든 하드웨어나 적용 분야에서 동일한 자바를 사용하는 것은 불가능하다. 각 영역에 특화된 자바 플랫폼이 있다.

  • 중요 세 가지
  • JDK(Java Development Kit): 자바 프로그램 개발에 필요한 구성 요소
  • JRE(Java Runtime Environment): 자바 프로그램 실행에 필요한 구성 요소
  • API(Application Programming Interface): 자바 응용 프로그램 개발에 사용하는 라이브러리

자바의 장점

  1. 간결하면서도 강력한 객체지향 언어이다.
  2. 개방형 구조로 여러 기술과 융합이 가능하다.
  3. 플랫폼에 독립적이므로, 여러 운영체제나 하드웨어에서도 동일하게 실행한다.
  4. 많은 오픈소스 프레임워크로 생산성을 증가하고 유지보수 비용을 절감할 수 있다.

자바의 단점

  1. 처리 속도가 중요한 애플리케이션에는 적합하지 않다.
  2. GUI 요소가 많은 MS 윈도 응용 프로그램 개발에는 적합하지 않다.
  3. 하드웨어에 연결하여 제어할 수 없기 때문에(가상 머신 이용) 직접 하드웨어를 정밀하게 조정해야 하는 프로그램 개발에는 적합하지 않다.

자바 프로그램 개발 절차

  1. 자바 프로그램 개발은 자바 소스 코드(. java) 작성 → 자바 컴파일러 → 자바 바이트코드(. class, 컴파일) → 자바 가상 머신(JVM) → 운영체제, 하드웨어 → 실행의 단계로 진행한다.
  2. 바이트코드는 운영체제에 상관없이 가상 머신에서 실행하는 중간 코드이다.

정리

1. 자바(Java) 첫 공개 1995년이고, 제임스 고슬링이라는 선생님(아저씨)이 만들었다. 

2. 하드웨어에 종속적이지 않은 중간 파일로, 가상 머신을 거쳐 해석·실행하는 구조

    (운영체제, 하드웨어 특성을 타지 않는다는 말입니다.)

3. 개발할 땐 무조건 JDK를 받고, 자바로 만들어진 프로그램만 사용 시 JRE를 받자 (귀찮으니까 무조건 JDK)

4. 객체 지향 언어 (Object-Oriented Programming, OOP)

반응형

'java' 카테고리의 다른 글

[Java] 추상 클래스  (0) 2019.10.26
[Java] 예약어 정리  (2) 2019.10.23
[Java] 지역변수와 전역변수  (1) 2019.10.23
[Java] 기본 자료형 9가지 문법 총 정리 (Feat.String,int)  (0) 2019.10.22
[Java] 컬렉션(Collection)이란?  (0) 2019.09.16

+ Recent posts