반응형
1. 소문자 → 대문자 변환
소문자를 대문자로 변경하는 코드이다.

Ascii 코드 상으로 대문자가 소문자보다 32만큼 작다는 것을 이용한 코드이다.


1
2
3
4
5
6
7
class LowerToUpper {
    public static void main(String[] args){
        char lowerCase = 'a';        
        char upperCase = (char)(lowerCase - 32);
        System.out.println(upperCase);
    }
}
cs


lowerCase 변수에 대문자로 변환하고자 하는 문자를 넣어주면 된다.

이 코드를 뼈대로 원하는 것을 더 추가하면 된다.




2. 대문자 → 소문자 변환

대문자를 소문자로 변경하는 코드이다.

위의 1번에서와 반대로 소문자는 대문자보다 32만큼 크다는 것을 이용한 코드이다.


1
2
3
4
5
6
7
class UpperToLower {
    public static void main(String[] args){
        char upperCase = 'A';        
        char lowerCase = (char)(upperCase + 32);
        System.out.println(lowerCase);
    }
}
cs



위의 두 코드를 뼈대로 원하는 것을 추가하는 방식으로 활용하길 바란다.

반응형
블로그 이미지

rootable

,

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

끝말잇기 게임

Develope/Java 2020. 5. 14. 00:55
반응형

JAVA를 이용하여 끝말잇기 게임을 만들어보았다.


아래는 개발 시의 조건들이다.


1. 참가인원을 입력받을 것

2. 참가 인원 수대로 이름을 입력받을 것

3. 끝말잇기 게임 진행

4. 패배한 인원의 이름을 출력할 것


아래는 프로그램 실행 결과이다.

이 것을 참고하여 여러분들도 직접 코딩해볼 것을 추천한다.


다음은 내가 작성한 코드이다.

직접 작성한 코드와 비교해보고 자신의 코드가 더 효율적이라 생각이 된다면 댓글로 부탁드립니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.util.Scanner;
 
class Player{
    String name="";
    String sayWord(){
        Scanner input = new Scanner(System.in);
        String word = input.nextLine();
        return word;
    }
    int succeed(String word,String compare){
        int result=0;
        
        int lastIndex = compare.length()-1;
        char lastChar = compare.charAt(lastIndex);
        char firstChar = word.charAt(0);
        
        
        if(firstChar==lastChar)
            result=1;
        else
            result=0;
        
        return result;
    }
}
 
public class WordGameApp {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("게임에 참가하는 인원은 몇명입니까>>");
        int playerCount = input.nextInt();
        Player[] playerList = new Player[playerCount];
        
        for(int i=0; i<playerCount; i++){
            System.out.print("참가자의 이름을 입력하세요>>");
            playerList[i] = new Player();
            playerList[i].name=input.next();
        }
        
        System.out.println("시작하는 단어는 아버지입니다");
        String FirstWord="아버지";
        
        int i=0;
        String compare=FirstWord;
        while(true){
            System.out.print(playerList[i].name+">>");
            String word = playerList[i].sayWord();
            if(playerList[i].succeed(word, compare)==1){
                i++;
                compare=word;
                if(i==playerCount) i=0;
                continue;
            } else {
                System.out.println(playerList[i].name+"이 졌습니다.");
                System.exit(1);
            }
        } 
    }
}
 
cs


** 코드를 작성하며 배운 것

1. 객체 배열을 생성 시 레퍼런스만 생성된 것이다.

 - main 함수에서 Player[] playerList = new Player[playerCount]; 을 하였을 때에는 Player라는 객체를 가리키는 레퍼런스들을 원소로 하는 배열이 생성된 것이다.

 - 각 원소별로 Player 객체를 가리키도록 playerList[i] = new Player(); 을 선언해주어야 한다.

반응형

'Develope > Java' 카테고리의 다른 글

Java의 정석 정리 - 2장 변수 (문자형)  (0) 2020.06.28
Java의 정석 정리 - 1장 자바를 시작하기 전에  (0) 2020.06.28
final  (0) 2020.05.11
static 멤버  (0) 2020.05.11
접근 지정자  (0) 2020.05.10
블로그 이미지

rootable

,

final

Develope/Java 2020. 5. 11. 21:54
반응형

final이라는 키워드를 한마디로 표현하자면 "변화를 허용하지 않는다!"라고 생각하고 접근하면 쉽다.


final 이라는 키워드가 사용될 수 있는 곳은 세 군데이다.

1) final 클래스

2) final 메소드

3) final 필드, 상수 정의


이에 대해 하나씩 살펴보도록 하자.


1) final 클래스

 : final이 클래스 이름 앞에 사용되면 해당 클래스를 상속받을 수 없음을 지정한다.


1
2
3
4
5
6
7
final class FinalClass {
    ...
}
 
class rootable extends FinalClass { // 컴파일 오류 
    ...
}
cs


2) final 메소드

 : 메소드 앞에 final 속성이 붙으면 이 메소드는 더 이상 오버라이딩할 수 없음을 지정한다.

 : 자식 클래스가 부모 클래스의 메소드를 오버라이딩하지 못하게 하고 무조건 상속받아서 사용하도록 하고자 한다면 해당 메소드를 final로 지정하면 된다.

1
2
3
4
5
6
7
public class FinalClass {
    protected final int finalMethod() { ... }
}
 
class rootable extends FinalClass { 
    protected int finalMethod() { ... } // 컴파일 오류, 오버라이딩 불가 
}
cs


3) final 필드, 상수 정의

 : 자바에서 상수를 정의할 경우에는 필드에 final 속성을 붙이는 것으로 한다.

1
2
3
4
5
6
7
8
9
public class FinalClass {
    final int ROW=10;    // 상수 정의 및 초깃값 설정
    final int COL;        // 컴파일 오류, 초기값이 설정되지 않았음
 
    void f() {
        int[] intArray = new int[ROW];    // 상수 활용
        ROW = 30;        // 컴파일 오류, 상수는 값 변경이 불가능함.
    }
}
cs


※ final로 상수 필드 정의 시 주의할 점

 - 상수 필드는 선언 시 초깃값을 지정해야 한다.

 - 상수 필드는 한 번 정의될 경우 값을 변경할 수 없다.

 - 클래스 내부에서 final 키워드만 이용할 경우 해당 클래스 객체들만 이용할 수 있으므로, 프로그램 전체에서 사용할 상수일 경우 static 키워드와 함께 사용하여야 한다. ( 보통 프로그램 전체에서 사용할 상수는 public static final로 선언한다)

반응형

'Develope > Java' 카테고리의 다른 글

Java의 정석 정리 - 1장 자바를 시작하기 전에  (0) 2020.06.28
끝말잇기 게임  (0) 2020.05.14
static 멤버  (0) 2020.05.11
접근 지정자  (0) 2020.05.10
가비지와 가비지 컬렉션  (0) 2020.05.10
블로그 이미지

rootable

,

static 멤버

Develope/Java 2020. 5. 11. 00:36
반응형

※ non-static 멤버와 static 멤버

멤버 변수를 분류하라고 한다면 non-static 멤버와 static 멤버로 분류할 수가 있다.

여기서 static 멤버란 객체를 생성하지 않고도 사용할 수 있는 멤버를 말한다.


그렇다면 이와 반대인 non-stiatic 멤버는?

예상한대로, 객체를 생성해야지만 사용할 수 있는 멤버이다. 


※ 특징

1) static 멤버

 - 클래스당 하나만 생성

 - 객체 내부가 아닌 별도의 공간에 생성되어 동일한 클래스의 모든 객체들이 공유 (=일종의 전역변수같은 개념)

 - 프로그램이 실행되자마자 생성되기 때문에 객체가 생성되기 전에도 static 멤버는 사용이 가능하며, 프로그램 종료까지 접근 가능

 - 클래스당 하나씩 생긴다고 하여 클래스 멤버라고도 부름.


2) non-static 멤버

 - 객체당 하나씩 생성

 - 객체마다 자신의 고유한 멤버 공간을 가지며 공유하지 않음

 - 객체가 사라지면 non-static 멤버도 함께 사라지며 더 이상 접근이 불가능함

 - 각 객체마다 하나씩 생긴다고 하여 인스턴스 멤버라고도 부름.



※ static 멤버 사용

1번째 방법 : 객체명 이용

 - static 멤버 또한 멤버이기 때문에 일반적인 멤버 변수 사용법처럼 객체명을 이용하여 접근이 가능하다.

객체.static필드

객체.static메소드


2번째 방법 : 클래스명 이용

 - static 멤버의 경우 클래스당 하나만 존재하기 때문에 클래스명을 이용해서도 접근이 가능하다.

클래스명.static멤버


예를 들자면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class staticSample{
    public static int id;
}
 
public class rootable {
    public static void main(String[] args){
        staticSample.id=31337;
        System.out.println(staticSample.id);  // id's value=31337
        
        staticSample smp1=new staticSample();
        smp1.id=1004;
        System.out.println(staticSample.id);  // id's value=1004
    }
}
cs

클래스 staticSample에 static 멤버 id를 선언해줄 경우 클래스명 staticSample을 이용해서 해당 static 멤버에 접근이 가능하며, 객체를 생성하여 해당 객체명인 smp1을 이용해서도 접근이 가능하다.


※ static 활용

1) 전역 변수나 전역 함수를 만들 때 사용

 - JAVA의 경우 캡슐화의 원칙 때문에 어떠한 변수나 함수도 클래스 밖에 존재할 수 없으며 클래스의 멤버로 존재해야 한다. 하지만 프로그래밍을 하다보면 가끔 전역 변수나 전역 함수가 필요할 때가 있는데 이를 해결하기 위한 것이 바로 static이다.

 - 대표적으로 java.lang.Math 클래스의 경우 다음과 같이 객체 생성 없이 바로 static 멤버를 사용한다.

int n = Math.abs(-5);


2) 공유 멤버를 만들고자 할 때 활용

 - static으로 선언된 필드나 메서드는 모두 이 클래스의 각 객체들의 공통 멤버가 되며 공유가 된다.


※ static 메소드의 제약 조건

1) static 메소드는 오직 static 멤버만 접근할 수 있다.

 - static 메소드는 객체가 생성되기 이전에도 접근이 가능하므로 인스턴스 메소드, 인스턴스 필드를 사용할 수 없다.

 - 인스턴스 메소드는 static 멤버를 모두 사용할 수 있다.


2) static 메소드에서는 this 키워드를 사용할 수 없다.

 - this 레퍼런스란 호출 당시 실행 중인 객체를 가리키는 것인데, static 메소드는 객체가 생성되지 않은 상황에서도 클래스 이름을 이용하여 접근이 가능하므로 this 레퍼런스를 사용할 수 없다. static 메소드를 호출하였을 때 생성된 객체가 하나도 존재하지 않을 가능성이 있기 때문이다.

1
2
3
4
5
6
7
8
class StaticSample{
    int n;
    static int m;
    void f1(int x){ this.n=x; }
    void f2(int x) { this.m=x; }
    static void s1(int x) { n=x }; // static 메소드는 instance 필드 사용 불가
    static void s2(int x) { this.n=x; } // static 메소드에서 this 사용 불가
}
cs


반응형

'Develope > Java' 카테고리의 다른 글

끝말잇기 게임  (0) 2020.05.14
final  (0) 2020.05.11
접근 지정자  (0) 2020.05.10
가비지와 가비지 컬렉션  (0) 2020.05.10
생성자(constructor)  (0) 2020.05.09
블로그 이미지

rootable

,