생성자


모든 클래스는 인스턴스화 될때 생성자를 사용한다.


생성자의 특징

-생성자는 리턴타입이 없다.

-생성자를 프로그래머가 만들지 않으면 매개변수가 없는 생성자가 컴파일할때 자동으로 만들어짐

-매개변수가 없는 생성자를 기본생성자라고 한다.

-생성자를 프로그래머가 하나라도 만들었다면 기본생성자는 자동으로 만들어지지않는다.


생성자의 역할

-생성자가 하는 일: 객체가 될때 필드 초기화 역할

-자동차가 객체가 될때 반드시 이름을 가지도록 하려면 Car클래스를 다음과 같이 만들어야함


public class Car{

  String name;

  int number;


  public Car(String n){

    name = n;

  }

}

 


위 Car클래스를 이용하여 Car 인스턴스를 생성하는 법

 

public calss CarExam2{

  public static void main(String args[]) {


  Car c1 = new Car("소방차");

  Car c2 = new Car("경찰차");

  //car c3 = new Car(); // 컴파일러 오류가 발생


  System.out.println(c1.name);

  System.out.println(c2.name);

  }

}



Car class는 기본 생성자를 가지지 않는다. 그래서 기본생성자로 Car객체를 생성할 수 없다.



'JAVA를 해보자' 카테고리의 다른 글

Java 시간계산 함수  (0) 2019.04.10
객체지향 vs 절차지향  (0) 2018.02.20
enum_열거형  (0) 2018.01.08
java 변수 사용 범위 static  (0) 2018.01.04
java 자바 스트링 메소드 String class method  (0) 2018.01.03

자바는 열거타입을 이용하여 변수를 선언할때 변수 타입으로 사용할수있다.


열거형은 JDK5에서 추가되었다.

JDK5이전에는 상수를 열거형 대신 사용하였다.


상수를 이용하는 방법

public class EnumExam {

  public static final String MALE="MALE";

  public static final String MALE="FEMALE";


  public static void  main (String[] args {

    String gender1;

    

    gender1 = Enum.MAIL;

    gender1 = FEMALE;

  }

}

상수를 사용했을때 문제점

-String으로 선언된 gender1엔 MALE.FEMALE둘중 한가지 값을 갖기를 원하는데, gender1의 type 이 String 이기 때문에 gender1="소년";이렇게     수행해도 전혀 문제가 되지 않는다.

-실행할때 원했던 값이 MALE,FEMALE이 아닌 다른 값이 들어오게 되므로 문제를 발생시킬수있다.


해결방법

-이런 문제를 발생시키지 않게 하기 위해 열거형을 사용하면 된다.

-열거형의 정의방법

enum Gender{

  MALE,FEMALE;

  } 


열거형 사용방법

  Gender gender2;


  gender2 = Gender.MALE;

  gender2 = Gender.FEMALE;

  

  /Gender type의 변수에는 MALE 이나 FEMALE만 대입이 가능해진다.

   다른 값은 저장할수가없다. 


'JAVA를 해보자' 카테고리의 다른 글

객체지향 vs 절차지향  (0) 2018.02.20
java_ 생성자  (0) 2018.01.08
java 변수 사용 범위 static  (0) 2018.01.04
java 자바 스트링 메소드 String class method  (0) 2018.01.03
java 다양한 형태의 메서드  (0) 2018.01.02

이클립스에 플러그 인을 추가해봅니다.


먼저 테마바꾸는 방법을 ARABOZA

흰색바탕보다 검은 화면이 뭔가 더 있어 보이니까

먼저 이클립스를 켜고 상단메뉴 바에서 "help"를 선택해주세요




find창에 color theme라고 검색해주면 Eclips Color Theme 1.0이 보입니다.

옆에 인스톨을 눌러주세요


인스톨을 누르시면 설치가 진행됩니다.



동의해주세요 동의하지 않으면 설치가 안돼요


인스톨을 계속해주시고 재시작을 눌러주시면 됩니다.


이번엔 설치된 테마를 적용해봅니다.

Window >> Preferences >> General >> Appearance >> Color theme를 보시면 목록이 보이게됩니다.


테마를 지정하면 작업창만 색이 변하는걸 확인할수 있습니다. 

다시 이클립스 마켓으로 들어가서 moonrise를 검색해줍니다.


문라이즈 테마를 설치하고 이클립스를 재시작해주세요




Window >> Preferences >> General >> Appearance

위의 로그로 들어가서 theme를 설정해주면 이클립스 전체가 색이 변합니다.



다시 Color Theme로 들어가서 본인의 마음에 드는 컬러테마를 선택해주시면 됩니다.!


여기까지 이클립스 테마 바꾸기를 알아보았습니다.




'eclips tip?' 카테고리의 다른 글

이클립스 콘솔(Console) 라인 출력수 늘리기  (0) 2019.02.11


프로그램상에서 사용되는 변수들은 사용 가능한 범위를 가지고 그것을 변수의 스코프라고 한다.

변수가 선언된 블럭이 변수의 사용범위이다.

    public class ValableScopeExam{

 

        int globalScope = 10;   //클래스 변수

 

        public void scopeTest(int value){  

            int localScope = 10;

            System.out.println(globalScope);

            System.out.println(localScpe);

            System.out.println(value);

        }

    }

  • 클래스의 속성으로 선언된 변수 globalScope 의 사용 범위는 클래스 전체 이다.
  • 매개변수로 선언된 int value 는 블럭 바깥에 존재하기는 하지만, 메서드 선언부에 존재하므로 사용범위는 해당 메소드 블럭내이다.
  • 메소드 블럭내에서 선언된 localScope 변수의 사용범위는 메소드 블럭내이다.

main메소드에서 사용하기

  • 같은 클래스 안에 있는데 globalScope 변수를 사용 할 수 없다.
  • main static한 메소드이다. static한 메서드에서는 static 하지 않은 필드는 사용 할 수 없다.

    public class VariableScopeExam {

        int globalScope = 10;

 

        public void scopeTest(int value){

            int localScope = 20;            

            System.out.println(globalScope);

            System.out.println(localScope);

            System.out.println(value);

        }  

        public static void main(String[] args) {

            System.out.println(globalScope);  //오류

            System.out.println(localScope);   //오류

            System.out.println(value);        //오류 

        }  

    }



static

  • 같은 클래스 내에 있음에도 해당 변수들을 사용할 수 없다.
  • main 메소드는 static 이라는 키워드로 메소드가 정의되어 있다. 이 메서드를 static 한 메소드 라고 한다.
  • static한 필드나, static한 메소드는 Class가 인스턴스화 되지 않아도 사용할 수 있다.

    public class VariableScopeExam {

        int globalScope = 10;

        static int staticVal = 7;

 

        public void scopeTest(int value){

            int localScope = 20;       

        }

 

        public static void main(String[] args) {

            System.out.println(staticVal);      //사용가능

        }

 

    }

static 변수는 공유된다.

  • static하게 선언된 변수는 값을 저장할 수 있는 공간이 하나만 생성
  • 인스턴스가 여러개 생성되도 static한 변수는 하나

    ValableScopeExam v1 = new ValableScopeExam();

    ValableScopeExam v2 = new ValableScopeExam();

    v1.golbalScope = 20;

    v2.golbalScope = 30;

 

    System.out.println(v1.golbalScope);  //20 출력된다.

    System.out.println(v2.golbalScope);  //30 출력된다.

 

    v1.staticVal = 10;

    v2.staticVal = 20;

 

    System.out.println(v1.statVal);  //20 출력된다.

    System.out.println(v2.statVal);  //20 출력된다.

  • golbalScope같은 변수(필드)는 인스턴스가 생성될때 생성되기때문에 인스턴스 변수라고 한다.
  • staticVal같은 static한 필드를 클래스 변수라고 한다.
  • 클래스 변수: static한 변수, 값을 저장할 수 있는 공간이 하나 밖에 없어서 값을 공유
  • 클래스 변수는 레퍼런스.변수명 하고 사용하기 보다는 클래스명.변수명 으로 사용하는것이 더 바람직

 

'JAVA를 해보자' 카테고리의 다른 글

java_ 생성자  (0) 2018.01.08
enum_열거형  (0) 2018.01.08
java 자바 스트링 메소드 String class method  (0) 2018.01.03
java 다양한 형태의 메서드  (0) 2018.01.02
java 필드(field) 선언  (0) 2017.12.31



String Class 메소드 

  • 문자열 길이 구하기
  • str.length() str이 참조하는 문자열의 길이를 구해서 int 타입으로 리턴해주는 메소드 

    System.out.println(str.length());  //str

  • 문자열 붙히기 (concat)
  • str.concat(world) 메소드는 str 이 참조하는 문자열 hello 에 메소드의 인자로 들어온 문자열 world  String 타입으로 리턴하는 메소드
  • String Class는 불변 클래스로, 메소드가 수행되면, 새로운 문자열을 만든다. 그러므로, 원래 클래스는 변하지 않는다.

    String str = new String("hello");

 

    System.out.println(str.concat(" world"));  //hello world

    System.out.println(str);  //hello

  • 문자열 자르기 (subString)
  • str.subString(1,3) str이 참조하는 문자열을 인덱스 1번부터 3번까지 자른 결과
  • str.subString(2) str이 참조하는 문자열을 2번 인덱스부터 마지막까지 자른 결과를 의미
  • 문자열의 인덱스는 0번 부터 시작

    System.out.println(str.substring(1, 3)); //el

    System.out.println(str.substring(2));   //llo world

 

'JAVA를 해보자' 카테고리의 다른 글

enum_열거형  (0) 2018.01.08
java 변수 사용 범위 static  (0) 2018.01.04
java 다양한 형태의 메서드  (0) 2018.01.02
java 필드(field) 선언  (0) 2017.12.31
java String class (스트링 클래스)  (0) 2017.12.31

public 리턴타입(메서드 실행후 결과값을 되돌려 줄때 어떤 타입으로 결과값을 돌려줄것인가) / 메서드명(매개변수) {구현} 

메서드는 리턴타입이 있는가 ? 없는가 ?

매개변수가 있는가 없는가에 따라 다양한 형태로 정의됨



메서드 형태

1. 매개변수도 없고 리턴하는 것도 없는 메서드

리턴하는 값이 없을때는 리턴타입을 void라고 적는다

public void method1() {

System.out.println("메서드1이 실행됩니다.");

}


2. 정수를 받아들인 후 리턴하지 않는 메서드

받아들이는 값은 어떤 타입이라도 상관없다.

받아들이는 값의 수는 여러개 일 수 있다. 어려개일 경우 (,)로 구분한다

public void method2(int x){

System.out.println(x+"를 이용한 메서드가 실행됩니다..);

}


3. 아무것도 받아들이지 않았지만 값을 출력하는 메서드

리턴값이 존재하기 때문에 리턴타입을 적어주어야 한다.

받아올 값이 없기때문에 매개변수는 비워도 된다.

public int method3() {

System.out.println("메서드 3이 실행됩니다.");

return 10;

}


4. 정수값은 2개 받아들이고 리턴하지 않는 메서드

public void method(int x, int y) {

System.out.println();

}


5. 정수값을 받아서 정수값을 출력하는 메서드

public int method(int y){

System.out.println(y+"를 이용하는 메서드입니다.");

return y*2;

}

'JAVA를 해보자' 카테고리의 다른 글

java 변수 사용 범위 static  (0) 2018.01.04
java 자바 스트링 메소드 String class method  (0) 2018.01.03
java 필드(field) 선언  (0) 2017.12.31
java String class (스트링 클래스)  (0) 2017.12.31
java 참조형 타입  (0) 2017.12.31



사람의 이름 나이 같은 속성을 자바에서는 필드(field)라고 한다.


우선 이름과 번호를 필드로 가지고 있는 Car클래스를 선언해준다.

public class Car {

//필드는 변수를 선언하는 것과 비슷하게

//타입 필드명

//이름을 표현할수 있는 타입은 String

String name;

int number;





Car 클래스의 인스턴스화 하기

Car c1 = new Car();

Car c2 = new Car(); //Car라는 인스턴스가 메모리에 2개 만들어진다.

//객체별로 name와 number라는 속성을 가짐


속성 이용하기

참조 변수 다음에 나오는 점.(dot)는 참조 변수가 참조하는 객체가 가지고 있는 것을 사용할때 쓴다.


c1.name="소방차";    // c1 참조 객체 name을 소방차로 설정

c1.number=123;    //c1 이 참조하는 객체 number를 123으로 설정

c2.name="경찰차";

c2.number=456;

System.out.println(c1.name);    //콘솔창에 c1이 참조하는 객체의 name 출력

System.out.println(c1.number);

System.out.println(c2.name);

System.out.println(c2.number);

'JAVA를 해보자' 카테고리의 다른 글

java 자바 스트링 메소드 String class method  (0) 2018.01.03
java 다양한 형태의 메서드  (0) 2018.01.02
java String class (스트링 클래스)  (0) 2017.12.31
java 참조형 타입  (0) 2017.12.31
java for each 반복문  (0) 2017.12.30

String 클래스


문자열을 표현하는 자바에서 가장 많이 사용하는 클래스


자바 인스턴스 생성 방법

1. new연산자를 이용하지 않고 인스턴스를 만드는 경우

Stringstr1="hello";

Stringstr2="hello";

 

hello라는 문자열이 메모리 중에서 상수가 저장되는 영역에 저장

상수는 변하지 않는 값을 의미.

String str2 = hello; 이 문장이 실행될 때에 hello 라는 문자열 상수는 이미 만들어져 있으므로 str1이 참조하는 인스턴스를 str2도 참조


2. new연산자를 이용해서 인스턴스를 만드는 경우

Stringstr3=newString("hello");

Stringstr4=newString("hello");


new연산자를 이용하여 인스턴스를 만들면 인스턴스는 무조건 새롭게 만들어진다.

String str4 = new String(hello); 이 문장이 실행될때도 새롭게 만들게 되므로, str3 str4는 서로 다른 인스턴스를 참조


if(str1==str2){ // 같은 인스턴스를 참조

System.out.println("str1str2는 같은 레퍼런스입니다.");

}

 

if(str1==str3){ // str1str3은 서로 다른 인스턴스

System.out.println("str1str3는 같은 레퍼런스입니다.");

}

 

if(str3==str4){ // str3str4는 서로 다른 인스턴스를 참조

System.out.println("str3str4는 같은 레퍼런스입니다.");

}

 

참조변수끼리 == 로 비교하면 서로 같은 것을 참조하는지 비교

String은 다른 클래스와 다르게 new를 사용하지 않고 사용할 수 있다. 메모리를 아끼려면 Stringnew를 사용하지 않고 사용하는 것이 좋다.

String은 불변 클래스이다. 불변이란 String이 인스턴스가 될때 가지고 있던 값을 나중에 수정할 수 없다.

String은 문자열과 관련된 다양한 메소드를 가지고 있다. 메소드를 호출한다 하더라도 String은 내부의 값이 변하지 않는다.

String이 가지고 있는 메소드중 String을 반환하는 메소드는 모두 새로운 String을 생성해서 반환한다.

   

Stringstr5="hello world";

Stringstr6=str5.substring(3);

 

substring은 문자열을 자른 결과를 반환하는 메소드이다. 해당 코드가 실행되어도 str5는 변하지 않음

str6str5가 가지고 있는 문자열 중 3번째 위치부터 자른 결과 즉 새로운 String을 참조


'JAVA를 해보자' 카테고리의 다른 글

java 다양한 형태의 메서드  (0) 2018.01.02
java 필드(field) 선언  (0) 2017.12.31
java 참조형 타입  (0) 2017.12.31
java for each 반복문  (0) 2017.12.30
java for 반복문을 이용해서 배열 사용하기  (0) 2017.12.30






참조형 타입은 기본형 타입을 제외한 모든 타입

배열도 참조형이고, 클래스도 모두 참조 타입


참조형 변수

String str = new String(hello);


str 변수 앞에 기본형 타입이 아닌 String클래스


이퀄(=)뒤에는 new 다음에 생성자라는 것이 있다.


new 라는 키워드는 클래스를 메모리에 올려준다.

 이렇게 메모리에 올라간 클래스를 인스턴스라고 말함



메모리에 올라간 인스턴스를 가리키는 변수==참조하는 변수==레퍼런스 하는 변수가 str 이다. 


참조한다. 레퍼런스 한다라는 것은 변수가 인스턴스를 가지고 있는게 아니라 말그대로 가리킨다는 의미


str이라는 변수에는 메모리의 위치 값이 저장되는 것이다. 

메모리의 위치값이 저장된다고 하더라도, 어떤 메모리에 저장되는지 그 정보를 알 수 있는 방법은 없다. 

그렇기 때문에 str변수는 String 인스턴스를 참조한다라고만 알아두자.

클래스들은 모두 참조형이다.

'JAVA를 해보자' 카테고리의 다른 글

java 필드(field) 선언  (0) 2017.12.31
java String class (스트링 클래스)  (0) 2017.12.31
java for each 반복문  (0) 2017.12.30
java for 반복문을 이용해서 배열 사용하기  (0) 2017.12.30
java 배열  (0) 2017.12.30

for each

for each에서는 배열의 항목 수만큼 실행부분을 반복하는데

반복이 이뤄질때마다 배열 항목을 순서대로 꺼내 변수에 자동대입해준다.


따로 반복 변수를 선언하거나 배열의 값을 가져오는 작업이 없어 편리하다.

대신 읽을수는 있지만 수정할수는 없다.



'JAVA를 해보자' 카테고리의 다른 글

java String class (스트링 클래스)  (0) 2017.12.31
java 참조형 타입  (0) 2017.12.31
java for 반복문을 이용해서 배열 사용하기  (0) 2017.12.30
java 배열  (0) 2017.12.30
java_for 반복문사용  (0) 2017.12.30

+ Recent posts